Als Übersicht habe ich Probleme mit einem UINavigationController innerhalb eines UITabBarController aufrufen viewWillAppear aufrufen, wenn eine Ansicht aus dem Stapel entnommen wird.Probleme mit UINavigationController innerhalb von UITabBarController, viewWillAppear nicht
// Create views for Tab Bar
UINavigationController *view1 = [[UINavigationController alloc] initWithRootViewController:[[newsFeedNavigationController alloc] initWithStyle:UITableViewStylePlain]];
resizedTabBatItem *tabBarItem1 = [[resizedTabBatItem alloc] initWithTitle:nil image:[UIImage imageNamed:@"newspaper.png"] tag:0];
[view1 setTabBarItem:tabBarItem1];
[tabBarItem1 release];
UIViewController *view2 = [UIViewController new];
resizedTabBatItem *tabBarItem2 = [[resizedTabBatItem alloc] initWithTitle:nil image:[UIImage imageNamed:@"speechbubble.png"] tag:1];
[view2 setTabBarItem:tabBarItem2];
[tabBarItem2 release];
....
// Create the tab bar controller
bookTabBarController = [BookTabBarController new];
[[bookTabBarController view] setFrame:CGRectMake(0, 0, 320, 460)];
// Add the views to it
NSArray *viewControllers = [NSArray arrayWithObjects:view1, view2, view3, view4, view5, nil];
[[bookTabBarController tabBarController] setViewControllers:viewControllers];
Mein newsFeedNavigationController ist nur ein subclassed UITableViewController (mit viewWillAppear und die Unterklasse nicht zu stören, da sie nie in newsFeedNavigationController genannt):
Von den Delegierten wird ein UITabBarController programmatisch gemacht. Elemente, die beim Anklicken einen neuen UIViewController in den Stapel schieben.
Das Problem ist, dass viewWillAppear nie in NewsFeedNavigationController aufgerufen wird, wenn Ansichten aus dem Stapel ausgeklappt werden, und die Elemente in der Liste hervorgehoben bleiben. Ich habe mich ein paar Stunden damit beschäftigt, an dem Punkt, an dem ich Hilfe brauche, um herauszufinden, was ich falsch mache.
In meinem newsFeedNavigationController habe ich versucht, einen NSLog hinzuzufügen, um zu sehen, ob es aufgerufen wird oder ich etwas getan habe, aber es wird nie aufgerufen.
- (void)viewWillAppear:(BOOL)animated {
NSLog(@"is viewWillAppear called?");
[super viewWillAppear:animated];
}
Edit:
Okay, jetzt ist hier etwas seltsam Ich bemerkte:
Wenn ich laufen:
[self presentModalViewController:(any UIview) animated:YES];
und dann entlassen, beginnt viewWillAppear richtig funktioniert wenn ich poppe und Ansichten schiebe ... So, jetzt bin ich ratlos. Es ist nicht wirklich eine Lösung, sondern vielleicht ein Teil von etwas, das vor sich geht.
Ich bin verwirrt. In Ihrem Post sagten Sie "UINavigationController in einem UITabBarController" und in Ihrem Follow-up sagten Sie "UITabBarController in einem UINavigationController" ... welche? Weil ich ein identisches Problem mit einem Nav-Controller als Tab in einem Tab-Bar-Controller habe ... was, wie ich verstehe, unterstützt werden sollte. Aber ViewDidAppear beginnt erst zu arbeiten, nachdem ich eine modale Ansicht von einer der Ansichten gezeigt habe, die an den Nav-Controller weitergegeben wurden. Sehr eigenartig. – Steve
Siehe meine Antwort für eine allgemeine Lösung für dieses Problem. – titaniumdecoy
Das war das gleiche wie mein Problem. Es tut mir leid für die Verwirrung. Was ich ursprünglich hatte, war ein UINavigationController mit einem View-Controller, und dann würde der "Home" -Bildschirm im Wesentlichen einen UITabBarController enthalten, der als nächstes im Stapel war. Dann könnten Sie eine neue Ansicht in den Stapel schieben. Bsp .: UINavigationController w/login-Ansicht als root, wenn in, eine uitabbar eingefügt wurde und Ansichten aus einer Tabelle in das "main" -Nav geschoben werden konnten. Mein Problem war, dass viewWillAppear nicht über den Stack weitergegeben wurde (es würde von UINavigationController auf UITabBarController gehen, aber nicht auf die Ansicht der Tab-Leiste). – Dandy