關於-viewWillAppear:等無法調用的總結

原文: 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];
}


發佈了26 篇原創文章 · 獲贊 3 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章