原文: http://blog.csdn.net/ldd909/article/details/6831013
產生原因是用了UINavigationController.
將UINavigationController的view作爲subview添加到了其他viewController的view中。
或者把UINavigationController添加到UITabbarController中了。
此時,NavigationController的stack裏面的viewController就收不到-(void)viewWillAppear:(BOOL)animated;等4個方法的調用。
原因還不敢確定,應該是這樣的結構破壞了消息的響應鏈。導航控制器上層的viewController只是接受了導航控制器的view,而不是controller. 估計tabbarController內部也是處理了set進去的controller的view。
解決方法兩種:
1,在導航控制器上層controller的viewWillAppear中顯式調用viewWillAppear方法。
-(void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[selectedViewController viewWillAppear:animated]; //tabbarController直接用selectedViewController更方便
}
2,把導航控制器上層controller設爲UINavigationController的delegate,
在-(void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated ;中顯示調用viewWillAppear
-(void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
[viewController viewWillAppear:animated];
}