文章标题
2016-01-23 12:53
218 查看
关于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的用法。
相关文章推荐
- tcp/ip协议的3次握手
- select真的有限制吗
- linux mysql安装
- openstack运维实战系列(十)之nova指定compute节点和IP地址
- Hotspot JVM的常用选项
- vctor容器的使用
- 阿里云windows服务器下的我的世界配置失败内存超限的问题
- 修改gradle库下载地址
- Struts2--思维导图
- POJ 3680 Intervals (费用流经典构图题)
- CBC6报错 [Linker Fatal Error]Fatal:Expected a file name:
- Ubuntu 大小写桌面显示
- IO流 带行号的缓冲区
- Topological Sorting
- Read only file system on Android
- 【Hibernate】Hibernate 利用缓存(一级、二级、查询)提高系统性能
- 利用统一资源标识符管理应用状态信息
- 5_Selenium Log4j日志
- hadoop机架感知
- windows mysql 解压版 data文件初始化