关于viewWillAppear&viewDidAppear&viewWillDisappear&viewDidDisappear的一些问题
- 发现问题:
本段是关于问题的描述:
前几天我做一个用户界面的读取与修改时发现了一个很不容易发现的问题。
关于用户信息与修改的界面我的思路是这样的。
UserInfo和UserEdit分别为两个大的ViewController,然后这个ViewController可以自定义为一个containerViewController,通过这两个主要的大的ViewController来处理用户信息的不同造成不同显示的情况。
所以逻辑顺序如下。
用户触发用户查看用户信息操作->
用户进入UseInfoViewController->
UserInfoViewController获取用户的详细信息->
由用户信息的类型参数决定ContainerViewController的ActivityController是哪个->
显示试图。
同理修改也是这个样子的。
但我的跳转是由UINavigationController来进行控制和实现的这也给我后面的事情造成了一些困扰。
当我的UserEdit进行返回行为是,我的UserInfo的显示出了问题。
这个问题我找了好久才发现是由于viewWillAppear这个函数没有被执行到。 - 解决办法
我的解决办法是将用户信息这个数据结构的SET方法重写一遍来实现ViewWillAppear的函数功能。
- (void)setUserDetail:(MyUserDetail *)userDetail {
_userDetail = userDetail;
if (self.isViewLoaded) {
[self getPortraitImage];
[self updateView];
}
}
这样当进行值得传递时将ViewWillAppear中的函数执行。 - 问题原因
后来我查到了问题发生的原因是用了UINavigationController。
将UINavigationController的view作为subview添加到了其他viewController的view中。
或者把UINavigationController添加到UITabbarController中了。 此时,NavigationController的stack里面的viewController就收不到-(void)viewWillAppear:(BOOL)animated;等4个方法的调用。
所以以后要注意自己的ViewController对已NavigationController的用法。