Cuando se carga una vista, quiero ver si es porque el usuario presionó el botón Atrás. ¿Cómo puedo verificar esto?Averiguar si el usuario presionó el botón Atrás en uinavigationcontroller?
Respuesta
La única forma de hacerlo es asegurarse de que sea el botón de retroceso para crear un botón personalizado. Si no sabes cómo hacerlo, mira esto tutorial. No se verá exactamente como el botón de retroceso normal, pero está cerca. Si necesita más ayuda, publique un comentario
Verifica y repite otra respuesta, y si el cartel lo lee, quizás acepte que como la respuesta correcta –
@ user461864, se refiere al otro Andrew, no a la otra respuesta de Andrew: son diferentes Andrews. Pero tienes razón, la otra respuesta es muy superior; el presente es mucho trabajo extra en comparación. – JohnK
Maldición, tienes razón, pensé que era raro que respondiera dos veces, pero eso explica –
UINavigationController tiene una propiedad delegate
que emite devoluciones de llamadas delegadas. Por favor, consulte the iOS reference here.
El delegado no tiene una devolución de llamada presionada "botón de retroceso", sino que le indica cuándo algo va a aparecer en la pila de navegación. Cuando presiona hacia atrás, está "sacando" el controlador de la vista superior de la pila, por lo que le indicará que la vista está a punto de aparecer. Creo que esta es la devolución de llamada que estarías buscando.
Puede tener alguna lógica simple para comprobar si es el controlador de vista que está "interesado", y luego puede enviar una notificación, et al.
No hay ningún delegado que muestre cuándo un controlador de uinavigation ha salido de la pila. – Andrew
Dije que UINavigationController tiene un delegado. Si UINavigationController está administrando su jerarquía de vistas, de hecho se devolverá la llamada al delegado, si está configurado. – makdad
Estoy tratando de hacer esto. Cuando se realiza una copia de seguridad, desafortunadamente, se llama al "nuevo" controlador de vista [el que se respalda para] -visualizarAparece antes de que se utilice el método de delegado -navigationController: willShowViewContoller: animated: viewController ... – chadbag
La mejor solución que he encontrado para detectar la pulsación del botón Atrás de un UINavigationController (pre-iOS 5.0) es verificando que el controlador de vista actual no está presente en el controlador de navegación ver la pila del controlador.
Es posiblemente más seguro comprobar esta condición en - (void)viewDidDisappear:(BOOL)animated
como lógicamente, cuando se llama al método sería muy probable que el controlador de vista se haya eliminado de la pila.
Pre-IOS 5.0:
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
if (![[self.navigationController viewControllers] containsObject:self]) {
// We were removed from the navigation controller's view controller stack
// thus, we can infer that the back button was pressed
}
}
iOS 5.0+ puede utilizar -didMoveToParentViewController:
- (void)didMoveToParentViewController:(UIViewController *)parent
{
// parent is nil if this view controller was removed
}
¡Esto funciona genial! Pero mencionaste antes de iOS 5.0 ... ¿Hay un método específico de iOS 5 que se pueda usar para capturar la devolución de llamada del botón de retroceso? – Keller
He actualizado mi respuesta para un nuevo método agregado en iOS 5.0. – Andrew
Esto también se llama cuando se empuja el VC (al menos en iOS 6). – fabian789
en su viewWillDisappear cheque método
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
if ([self isMovingFromParentViewController]) {
//specific stuff for being popped off stack
}
}
Esto es sólo para iOS 5 correos
falta paréntesis en la instrucción if, pero de lo contrario es una respuesta muy útil. ¡Gracias! – AddisDev
Como alternativa a esto, inspirado en la respuesta de Andrew, puede hacer algo antes del movimiento anulando 'willMoveToParentViewController:' en lugar de 'didMoveToParentViewController:'. – fatuhoku
Esta solución no funciona, a menos que en iOS 8. –
Este es un escenario ligeramente diferente, pero pensé que la solución podría ayudar a otros.
En mi situación, tenía un UINavigationController dentro de un UIPopoverController. Necesitaba detectar si el usuario hizo clic en el botón Atrás, o hizo clic fuera del popover. Para hacer esto, verifiqué la propiedad visibleViewController en viewWillDisappear. Si el controlador de vista sigue siendo visibleViewController al cerrarse, entonces el popover se cierra por otros medios. Si el controlador de vista no es visibleViewController al cerrar, se presionó el botón Atrás.
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
if (self.navigationController.visibleViewController != self) {
<Do something since we're closing using something else>
} else {
<Do something since we're closing because of the back button>
}
}
He intentado utilizar la solución de Zach, pero isMovingFromParentViewController devuelve cierto para ambos casos.
Verifiqué esto funciona en iOS 5 +
espero que esto ayude.
Crear una costumbre posterior botón de la barra y fijar el objetivo,
Paso 1: Añadir estos métodos a la clase
- (void)backButtonClicked :(id)sender{
[self.navigationController popViewControllerAnimated:YES];
}
- (void)addBackBarButton{
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
button.frame = CGRectMake(0, 0, 55, 35);
[button setTitle:@"back" forState:UIControlStateNormal];
[button addTarget:self action:@selector(backButtonClicked:) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *customBarItem = [[UIBarButtonItem alloc] initWithCustomView:button];
self.navigationItem.leftBarButtonItem = customBarItem;
}
Paso 2: Llame a [auto addBackBarButton]; en el método viewDiDLoad
Obtendrá la acción en método backButtonClicked. Puedes jugar con él de la manera que quieras.
¡Salud!
En aras de la exhaustividad, mezcla de dos respuestas upwoted (1, 2) en Swift:
override func willMoveToParentViewController(parent: UIViewController?) {
super.willMoveToParentViewController(parent)
if parent == nil {
// view controller is popping
}
}
No use 'will', use' did' ya que hay un gesto pop de borde de pantalla. – SoftDesigner
- 1. El botón Atrás de UINavigationController desaparece?
- 2. Botón Atrás personalizado en UINavigationController
- 3. Simulando el botón Atrás de la UINavigationController en el iPhone
- 4. Detectar si el usuario ha usado el botón Atrás
- 5. ¿Cómo mostrar el botón Atrás en RootViewController del UINavigationController?
- 6. UINavigationController Botón Atrás no visible, pero funciona
- 7. Interceptar el botón Atrás
- 8. Deshabilitar el botón Atrás en el navegador
- 9. ¿Verificar si se presionó la tecla Atrás en Android?
- 10. Cómo detectar si el usuario hizo clic en el botón "Atrás"
- 11. ¿Hay alguna forma en History.js de saber cuándo se presionó el botón Atrás?
- 12. detectar pulsación larga en el botón Atrás de UINavigationItem
- 13. cambiar la fuente del botón Atrás de UINavigationController
- 14. Ejecutar document.ready incluso si el usuario llegó a la página presionando el botón Atrás
- 15. ¿Cómo llamar a un método cuando se presiona el botón Atrás en un UINavigationController? (iPhone)
- 16. UINavigationController: Ocultar el botón Atrás en una vista Lo oculta en todas las vistas
- 17. ¿Cómo puedo personalizar el color del texto del botón Atrás en una vista de encabezado UINavigationController?
- 18. Vista web de Android con el botón Atrás, si no
- 19. Cómo deshabilitar el botón Atrás en el navegador cuando el usuario cierra sesión en asp.net C#
- 20. Android - Simular el botón Atrás
- 21. GWT botón Atrás navegador
- 22. PJAX: Problemas con el botón Atrás
- 23. Android: Cómo simular el botón Atrás
- 24. cómo desactivar el botón Atrás en Android
- 25. UINavigationController "botón de retroceso" texto personalizado?
- 26. ¿Cómo volver atrás una vista en UINavigationController?
- 27. iOS cómo quitar el botón Atrás?
- 28. Historial de página - ¿Existe el botón Atrás?
- 29. El botón de navegación hacia atrás no se muestra, cómo agregar el botón Atrás a UINavigationItem
- 30. Mostrar información según el botón que se presionó
¿Quieres saber si se trataba de un usuario inicia haciendo estallar o hacer estallar en general? –
Podría ser bueno elaborar sobre su objetivo general. Puede haber una manera más fácil de hacer lo que estás tratando de hacer. Si necesita saber si se cambió algún valor o se estableció en la segunda vista, por ejemplo, simplemente debe verificar ese valor. –
Popping es lo que quiero que me cuenten. – Andrew