2010-12-14 10 views
6

En iOS4.2/iPhone4¿Cómo saber cuándo se muestra una vista de UIViewController después de estar en segundo plano?

  • Haga clic en icono para iniciar la aplicación (se visualiza algún punto de vista de vista controladores)
  • Haga clic en el botón de inicio del iPhone (pantalla de regreso a casa )
  • botón Inicio haga doble clic
  • Seleccionar lanzado previamente aplicación de la selección

Ahora puedo ver que mi aplicación delegado recibe un mensaje "applicationDidBecomeActive" cuando se selecciona después del último paso, pero ¿cómo sabe mi viewController (el que se muestra actualmente)?

viewDidLoad ya se ha llamado, por lo que no se vuelve a llamar. viewWillLoad no se vuelve a llamar.

Parece que no puede resolverlo. La razón por la que estoy preguntando es si quiero verificar si se realizaron cambios en la configuración, pero me gustaría hacer eso en el controlador de visualización porque eso es lo que más le importa.

Respuesta

5

en usted es AppDelegate applicationDidBecomeActive poner esto:

- (void)applicationDidBecomeActive:(UIApplication *)application 
{ 
    UINavigationController *navc = (UINavigationController *)[tabBarController selectedViewController]; 

    UIViewController *topvc = [navc topViewController]; 

    if ([topvc respondsToSelector:@selector(viewControllerDidBecomeActive)]) 
    { 
     [topvc performSelector:@selector(viewControllerDidBecomeActive)]; 
    } 
} 

Esto tiene la viewController que se está viendo en la pantalla. Solo tiene que implementar viewControllerDidBecomeActive en cada viewControllers;)

+0

Correcto, ese tipo de cosas funcionan, pero no es exactamente lo que estaba buscando. Mi jerarquía de vistas es un poco más compleja, por lo que su código publicado no funcionará como está, pero entiendo la idea y podría hacerlo de esa manera. Así que definitivamente es una forma de hacerlo. Creo que esperaba perder algo y había una manera más directa que era independiente de cualquier jerarquía de control de vista que uno tenga. – Fraggle

+0

Varios años después, pero AFAICS la mejor opción sería usar NSNotificationCenter. –

0

En la aplicación appDelegateDidBecomeActive estableció una propiedad booleana que marca que acaba de aparecer desde el fondo.

Luego, en su controlador de vista, específicamente en la anulación de viewDidAppear, verifique la propiedad appDelegate, si es verdadera, entonces sabrá que proviene del fondo, de lo contrario, simplemente ha aparecido como siempre. BTW Luego, establezca la propiedad booleana en falso para mayor nitidez.

EDIT- Debería llamar a viewDidAppear manualmente en la aplicaciónDidBecomeActive a menos que esté recreando su pila de navegación. Si fue capaz de obtener un puntero al controlador de vista visible actual, entonces llamar a viewDidAppear debería ser un enfoque sin complicaciones ya que todos los controladores de vista tienen este método. Usted no necesita ningún delegados o etc.

+0

Bueno, no, eso no lo hace. La vista ya ha aparecido. Luego alguien va y cambia algunas configuraciones, luego vuelven a la aplicación. Por lo general, en iOS 4 de todos modos, el viewDidAppear no se llamará de nuevo, ¿verdad? – Fraggle

+0

¡Ah, lo siento! Olvidé en mis aplicaciones que estoy haciendo cosas para la pila de navegación en applicationDidBecomeActive.Si tiene un puntero a su controlador de vista visible actual, entonces podría simplemente llamar a una función dentro de su vista diciéndole que verifique si algo cambió, pero eso es esencialmente lo mismo que la respuesta de Thomas, pero sin la elegancia de los delegados. – Rob

Cuestiones relacionadas