我有一个UINavigationController
,其中UITableView
是我的主菜单。用户单击一个单元格,并在堆栈上推送新视图。在一个案例中,我推送另一个需要工具栏的UITableView
。因此,在第二个tableView的init上,我使用正确的项设置self.toolbarItems
属性。但是我需要致电[self.navigationController setToolbarHidden:NO animated:YES];
所以在viewDidAppear
或viewWillAppear
方法中调用它是有意义的。但我把它放在那些方法中并找出(也是通过NSLog)它们永远不会被调用。将其隐藏在viewWillDisappear
或viewDidDisappear
中也是如此。为什么不调用这些方法?我应该在哪里隐藏/显示工具栏呢?
答案 0 :(得分:18)
我注意到行为,如果父控制器(如UINavigationController
或UITabBarController
)从未调用它viewWill/DidAppear
,它也不会在子控制器上调用它。因此,请确保在创建父控制器的代码中,调用viewWillAppear
,显示它,然后调用viewDidAppear
。然后它应该在适当的时候对它的子控制器进行调用。
仔细检查父控制器是否正在调用这些方法,如果不是,请自行调用。
答案 1 :(得分:4)
是的,是真的
您可以先在
中编写此代码来执行此操作- (void)viewDidLoad {
self.navigationController.delegate = self;
}
然后在viewWillAppear
中编写要编写的代码- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
if ([viewController isKindOfClass:[self class]]) {
//write your code here
}
}
答案 2 :(得分:2)
虽然你解决了你的问题,但如果将来有人出现,另一个问题可能是你忘记了任何一种方法的动画:参数 - 也就是说,方法的格式需要如下所示: p>
- (void) viewWillAppear:(BOOL)animated
答案 3 :(得分:0)
我在iOS7中注意到了同样的问题。当我使用标签栏(2个按钮A,B)和导航控制器时。
A有两个观点。一个有tableview,第二个根据表视图中的选择显示数据。
B是唯一的观点。
指向另一个单独视图D的按钮,放置在标签栏视图(A& B)和A的两个视图中。
当我单击标签项B,viewWillAppear
和viewDidLoad
未调用的按钮时出现问题。
所以我通过presentModalViewController:animated:
解决了这个问题,并且当我从标签项B中查看D时,我使用了dismissModalViewControllerAnimated:
。