2010-12-14 4 views
6

In iOS4.2/iPhone4Woher weiß man, wenn eine UIViewController-Ansicht im Hintergrund angezeigt wird?

  • Click-Symbol starten app (einige Ansicht Controller Ansicht angezeigt wird)
  • iPhone Home-Taste (Rückkehr zum Home-Bildschirm)
  • Doppelklick Home-Taste klicken
  • Select startete zuvor App von die Auswahl

Jetzt ich, dass meine App sehen Der Delegate erhält eine Nachricht "applicationDidBecomeActive", wenn er nach dem letzten Schritt ausgewählt wurde, aber wie weiß mein viewController (der eine, der gerade angezeigt wird)?

viewDidLoad wurde bereits aufgerufen, so dass nicht erneut aufgerufen wird. viewWillLoad wird nicht erneut aufgerufen.

Kann nicht scheinen, es herauszufinden. Grund Ich frage, ob ich überprüfen möchte, ob irgendwelche Einstellungsänderungen vorgenommen wurden, aber das im View-Controller tun möchte, weil das die Sache ist, die sich interessiert.

Antwort

5

in du bist AppDelegate applicationDidBecomeActive formulieren:

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

    UIViewController *topvc = [navc topViewController]; 

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

Dadurch wird die Viewcontroller wird, die auf dem Bildschirm zu sehen ist. Sie müssen nur implementieren viewControllerDidBecomeActive auf jedem ViewControllers;)

+0

Richtig, diese Art von Arbeiten, aber nicht genau das, was ich suchte. Meine Ansichtshierarchie ist ein bisschen komplexer, so dass der von Ihnen gepostete Code nicht so funktionieren wird, wie es ist, aber ich bekomme die Idee, und ich könnte es so machen. Es ist definitiv ein Weg zu gehen. Ich glaube, ich hatte gehofft, dass ich etwas verpasst habe, und es gab einen direkteren Weg, der unabhängig von der Hierarchie der Viewcontroller war. – Fraggle

+0

Einige Jahre später, aber AFAICS wäre die beste Option, NSNotificationCenter zu verwenden. –

0

In der appDelegate applicationDidBecomeActive gesetzt eine boolean Eigenschaft Markierung, die es gerade aus dem Hintergrund erschien.

Dann in Ihrem Viewcontroller, insbesondere in der ViewDidAppear override, überprüfen Sie für die AppDelegate-Eigenschaft, wenn es wahr ist, dann wissen Sie, es ist aus dem Hintergrund gekommen, sonst ist es gerade als normal erschienen. BTW Setzen Sie danach die boolesche Eigenschaft für die Ordentlichkeit auf false.

EDIT- Sie müssten viewDidAppear manuell im applicationDidBecomeActive aufrufen, es sei denn, Sie haben Ihren Navigationsstapel neu erstellt. Wenn Sie einen Zeiger auf den aktuellen sichtbaren View-Controller erhalten konnten, sollte der Aufruf von viewDidAppear kein Problem sein, da alle View-Controller über diese Methode verfügen. Sie würden keine Delegierten benötigen oder usw.

+0

Nun, nein, das tut es nicht. Die Ansicht ist bereits erschienen. Dann geht jemand und ändert einige Einstellungen, dann gehen sie zurück in die App. Normalerweise wird das viewDidAppear auf iOS 4 sowieso nicht erneut aufgerufen, oder? – Fraggle

+0

Ah, tut mir leid, dein Recht! Ich habe in meinen Apps vergessen, dass ich in applicationDidBecomeActive Sachen zum Navigationsstack mache.Wenn Sie einen Zeiger auf Ihren aktuellen Controller für sichtbare Ansichten haben, können Sie einfach eine Funktion in Ihrer Ansicht aufrufen, um zu überprüfen, ob sich etwas geändert hat, aber das ist im Wesentlichen das Gleiche wie die Antwort von Thomas, aber ohne die Eleganz der Delegierten. – Rob

Verwandte Themen