www pin guardar gadget embedpin data codigo code boton ios iphone

ios - guardar - pinterest widget html code



Cómo atrapar el evento del botón Atrás (7)

En mi opinión la mejor solución.

- (void)didMoveToParentViewController:(UIViewController *)parent { if (![parent isEqual:self.parentViewController]) { NSLog(@"Back pressed"); } }

Pero solo funciona con iOS5 +

Tengo un UITableViewController que lanza un UIViewController y me gustaría atrapar cada vez que se presiona el botón Atrás en el controlador secundario, que es la clase que se deriva de ''UIViewController''. Puedo cambiar el título del Botón Atrás, pero la configuración de los valores objetivo y de acción al configurar el BackBarButtonItem parece ignorarse. ¿Cuál es una forma de recibir algún tipo de notificación de que se pulsó el botón Atrás?

- (void)showDetailView { // How I''m creating & showing the detail controller MyViewController *controller = [[MyViewController alloc] initWithNibName:@"MyDetailView" bundle:nil]; UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Pages" style:UIBarButtonItemStyleBordered target:self action:@selector(handleBack:)]; self.navigationItem.backBarButtonItem = backButton; [backButton release]; [self.navigationController pushViewController:controller animated:animated]; [controller release]; } - (void)handleBack:(id)sender { // not reaching here NSLog(@"handleBack event reached"); }


Ha pasado un tiempo desde que se me pidió esto, pero solo intenté hacerlo yo mismo. Usé una solución similar a la de Zoran, sin embargo, en lugar de usar una bandera, hice esto:

- (void)viewWillDisappear: (BOOL)animated { [super viewWillDisappear: animated]; if (![[self.navigationController viewControllers] containsObject: self]) { // the view has been removed from the navigation stack, back is probably the cause // this will be slow with a large stack however. } }

Creo que evita los problemas con las banderas y el IMO es más limpio, pero no tan eficiente (si hay muchos elementos en el controlador de navegación).


Puede crear su propio botón y colocarlo como el elemento de leftBarButtonItem la leftBarButtonItem . Luego [self.navigationController popViewController... que llame a su método donde puede hacer lo que sea, y llame a [self.navigationController popViewController... usted mismo


Puede implementar el método viewWillDisappear de UIViewController. Se recibe esta llamada cuando el controlador está a punto de desaparecer (ya sea porque se presionó otro en la pila del controlador de navegación o porque se presionó el botón "Atrás").

Para determinar si la vista está desapareciendo debido a que se presiona el botón Atrás, puede usar un indicador personalizado que establece donde presiona un nuevo controlador en el controlador de navegación, como se muestra a continuación

- (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; if (viewPushed) { viewPushed = NO; // Flag indicates that view disappeared because we pushed another controller onto the navigation controller, we acknowledge it here } else { // Here, you know that back button was pressed } }

Y donde quiera que presione un nuevo controlador de vista, debería recordar también establecer ese indicador ...

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { ... viewPushed = YES; [self.navigationController pushViewController:myNewController animated:YES]; ... }


Simplemente use viewDidDisappear en viewDidDisappear lugar. Será perfectamente llamado en cualquier escenario.

Basamos la gestión de su ciclo de vida en viewDidAppear y viewDidDisappear. Si conoces Android: ambos son comparables a los métodos onResume y onPause. Pero hay una diferencia cuando se trata de bloquear la pantalla o presionar el botón de inicio en iOS.


Yo uso este código:

- (void) viewWillDisappear:(BOOL)animated { if ([self.navigationController.viewControllers indexOfObject:self] == NSNotFound) { // your view controller already out of the stack, it meens user pressed Back button } }

Pero esto no es real cuando el usuario presiona el botón de la barra de pestañas y aparece el controlador de vista raíz en un solo paso. Para esta situación usa esto:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(viewControllerChange:) name:@"UINavigationControllerWillShowViewControllerNotification" object:self.navigationController]; - (void) viewControllerChange:(NSNotification*)notification { NSDictionary* userInfo = [notification userInfo]; if ([[userInfo objectForKey:@"UINavigationControllerNextVisibleViewController"] isKindOfClass:[<YourRootControllerClass> class]]) { // do your staff here } }

No olvides entonces:

[[NSNotificationCenter defaultCenter] removeObserver:self name:@"UINavigationControllerWillShowViewControllerNotification" object:self.navigationController];


{ UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"back" style:UIBarButtonItemStyleBordered target:self action:@selector(handleBack:)]; self.navigationItem.leftBarButtonItem = backButton; [backButton release]; [self filldata]; [super viewDidLoad]; }

simplemente reemplace backBarButtonItem con leftBarButtonItem