Như một cái nhìn tổng quan, tôi đang gặp vấn đề với một UINavigationController bên trong một khung nhìn gọi UITabBarControllerWillAppear bất cứ khi nào một khung nhìn được bật ra từ ngăn xếp.Vấn đề với UINavigationController bên trong của UITabBarController, viewWillAppear không được gọi là
Từ các đại biểu, một UITabBarController được làm bằng cách lập trình:
// 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];
newsFeedNavigationController của tôi là chỉ là một UITableViewController subclassed (và các lớp con không được can thiệp vào viewWillAppear, vì nó chưa bao giờ được gọi là trong newsFeedNavigationController). Trong đó, các mục mà khi nhấp vào sẽ đẩy một UIViewController mới vào ngăn xếp.
Vấn đề là bất cứ khi nào các khung nhìn được bật ra khỏi ngăn xếp, viewWillAppear không bao giờ được gọi trong newsFeedNavigationController và các mục trong danh sách vẫn được tô sáng. Tôi đã rối tung với điều này trong một vài giờ sáng tại thời điểm mà tôi cần một số trợ giúp để tìm hiểu những gì tôi đang làm sai.
Trong tin tức của tôiFeedNavigationController, tôi đã cố gắng thêm một NSLog để xem nó được gọi hay tôi đã làm gì đó, nhưng nó thậm chí không bao giờ được gọi.
- (void)viewWillAppear:(BOOL)animated {
NSLog(@"is viewWillAppear called?");
[super viewWillAppear:animated];
}
Edit:
rồi, bây giờ ở đây là cái gì lạ tôi nhận thấy:
Nếu tôi chạy:
[self presentModalViewController:(any UIview) animated:YES];
và sau đó bỏ qua nó, viewWillAppear bắt đầu hoạt động đúng khi popping và đẩy quan điểm ... Vì vậy, bây giờ tôi stumped. Nó không thực sự là một giải pháp nhưng có thể là một thứ gì đó đang diễn ra.
Tôi đang bối rối. Trong bài viết của bạn, bạn nói "UINavigationController bên trong của một UITabBarController" và trong theo dõi của bạn, bạn nói "UITabBarController bên trong của một UINavigationController" ... mà? Bởi vì tôi có một vấn đề giống hệt với một bộ điều khiển Nav như một tab trong một bộ điều khiển thanh tab ... mà, như tôi hiểu, nên được hỗ trợ. Nhưng ViewDidAppear chỉ bắt đầu làm việc sau khi tôi trình bày một khung nhìn phương thức từ một trong các khung nhìn được đẩy tới bộ điều hướng nav. Rất lạ. – Steve
Xem câu trả lời của tôi cho một giải pháp chung cho vấn đề này. – titaniumdecoy
Điều này cũng giống như vấn đề của tôi. Tôi xin lỗi vì khó hiểu. Những gì tôi đã có ban đầu là một UINavigationController w/một bộ điều khiển xem, và sau đó màn hình "nhà" sẽ chứa những gì về cơ bản là một UITabBarController tiếp theo trong ngăn xếp. Sau đó, bạn có thể đẩy chế độ xem mới vào ngăn xếp. Ví dụ: UINavigationController w/login view là root, khi in, một uitabbar được đẩy vào, và các khung nhìn từ một bảng có thể được đẩy vào nav "chính". Vấn đề của tôi là viewWillAppear đã không được chuyển xuống ngăn xếp (Nó sẽ đi từ UINavigationController đến UITabBarController, nhưng không phải là chế độ xem của Tab Bar). – Dandy