今天在项目中发现了一个问题,就是当我从一个viewcontrollerA push 到另外一个viewcontrollerB时,viewcontrollerB的viewwillappear这个方法没有执行。这下子可坏了,因为我要在viewcontrollerB中隐藏我的正式的导航栏添加自己写的加的导航栏,在viewwilldisappear中把真实的导航栏让他显示出来。怎么办呢,经过了种种方法无效后,看到了一片国外的帖子,虽然具体的内容只能看个大概,但是通过大概的浏览并配合其中贴出来的方法还是圆满解决了而我的问题,下面就让我把解决问题的过程写出来吧。
1.我在一个继承于UITabbarviewcontroller的viewcontroller中写了5个viewcontroller并将其放在5个navigationcontroller中,然后将这5个nav添加在uitabbarviewcontroller中。
2.我在其中一个nav中push到一个view controller中,这时,view controller的viewwillappear不执行;
3,我在继承于TabbarController的。m中写上
-(void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[nav1 viewWillDisappear:animated];
[nav2 viewWillDisappear:animated];
[nav3 viewWillDisappear:animated];
[nav4 viewWillDisappear:animated];
[nav5 viewWillDisappear:animated];
}
-(void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
[nav1 viewWillDisappear:animated];
[nav2 viewWillDisappear:animated];
[nav3 viewWillDisappear:animated];
[nav4 viewWillDisappear:animated];
[nav5 viewWillDisappear:animated];
}
-(void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[nav1 viewWillDisappear:animated];
[nav2 viewWillDisappear:animated];
[nav3 viewWillDisappear:animated];
[nav4 viewWillDisappear:animated];
[nav5 viewWillDisappear:animated];
}
-(void)viewDidDisappear:(BOOL)animated {
[super viewDidDisappear:animated];
[nav1 viewWillDisappear:animated];
[nav2 viewWillDisappear:animated];
[nav3 viewWillDisappear:animated];
[nav4 viewWillDisappear:animated];
[nav5 viewWillDisappear:animated];
}
运行程序,完美解决问题。
对于我的英语能力不是很好,为了让大家能够更好的明白其中道理,特把外文地址附上:http://davidebenini.it/2009/01/03/viewwillappear-not-being-called-inside-a-uinavigationcontroller 。
在iOS开发中遇到一个情况,从viewControllerA推动到viewControllerB时,B的viewwillappear方法未执行。这导致无法在B中自定义导航栏。通过在TabbarController的viewWillAppear、WillDisappear等方法中调用nav的对应方法,成功解决此问题。具体解决方案和外文链接在博客中详细说明。
9193

被折叠的 条评论
为什么被折叠?



