1

Ich habe verschiedene Methoden versucht, einige Code auszulösen, wenn ich beginne zu der ersten Ebene eines UINavigationController, aber keiner der folgenden Arbeit ...Wie kann viewWillAppear ausgelöst werden, wenn in der Navigationssteuerungshierarchie zurückgegangen wird?

// HomeViewController.m 
-(void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated 
{ 
    NSLog(@"trigger 1"); 
} 

- (void)viewWillAppear:(BOOL)animated { 
    NSLog(@"trigger 2"); 
} 

-(void) viewDidAppear:(BOOL)animated { 
    NSLog(@"trigger 3"); 
} 

Rückkehr Ich habe bis zu denken habe meine App falsch .. ist es etwas über UIViewControllers in UIViewControllers?

Dies ist die Feder für die App .. Es ist ein UITabBarController mit einem Navigationscontroller für jede Registerkarte, und darin die erste Seite des UINavigationController. Ist diese Einstellung der Grund, warum die Methoden nicht ausgelöst werden?

alt text

Nicht in dieser gezeigt ist ein UIView an der Unterseite, die in die Datei Management Ansicht verknüpft ist. Und um es komplizierter zu machen, ist MainViewController eigentlich die Kehrseite einer Utility-App.

Antwort

0

Nur um zu sagen, dass ich das anders gelöst habe. Ich musste etwas wie viewWillAppear aufrufen, da ich meine erste View-Tabelle aktualisieren musste, wenn sich etwas in meiner zweiten Ansicht geändert hatte.

So wie ich es erreicht wurde, in meiner ‚Tableview: commitEditingStyle‘ Methode (genannt nachdem ich etwas löschen), habe ich dies am Ende setzen ..

[[[[self.navigationController.tabBarController.viewControllers objectAtIndex:0] viewControllers] objectAtIndex:0] reloadTheTable]; 

reloadTheTable ist ein Verfahren, in meinem HomeViewController der macht Sachen wie update arrays und [tableView reloadData] etc;

Das ist eine Menge Klammern. Ich bin mir sicher, dass meine Feder so eingestellt werden kann, dass sie einfacher wird. Ich denke, Kasparov hat gesagt, dass er denkt, vier Züge voraus ... und vier Klammern ist meine Grenze.

Ich arbeitete sie heraus durch Dinge wie dies zu tun:

NSString *name = NSStringFromClass ([[self parentViewController] class]); 
NSLog(@"%@", name); // outputs UINavigationController 

und langsame Zugabe zu, bis ich was gefunden ich suchte:

name = NSStringFromClass ([[[[self.navigationController.tabBarController.viewControllers objectAtIndex:0] viewControllers] objectAtIndex:0] class]); //UINavigationController 
NSLog(@"%@", name); // outputs HomeViewController 

Es ist etwas definitiv seltsam im Weg ist viewWillAppear wird abgebrochen, wenn Sie Ansichten in Ansichten einfügen.

+0

Wann haben Sie das genannt? Bevor Sie den vorhandenen View-Controller öffnen? –

Verwandte Themen