viewWillAppear和viewDidAppear什么时候被调用

转载 2015年07月07日 18:35:54
viewWillAppear和viewDidAppear什么时候被调用

问:

当我向一个UINavigationController压入一个视图控制器的时候,

1.    什么时候会触发viewWillAppear和viewDidAppear?

2.    什么导致了触发viewWillAppear和viewDidAppear失败?

答:

当你调用pushViewController:animated把一个视图控制器压入UINavigationController的时候,UINavigationController会自动调用这些方法。相似的,当你tabs时,UITabBarController会直接调用这些方法,当你使用presentModalViewController时也会调用方法。当一个视图控制器的视图被添加到一个window中时也会调用这些方法。我在这些情况下没有遇到过这些方法调用失败的情况。

记住,这些方法只在这些特定的情况下控制器pushed或presented的时候被调用。在其它的情况下不会被调用,比如你添加你的视图控制器的视图作为一个视图的子视图而不是作为window的子视图。苹果官方文档说视图控制器仅用于全屏显示的视图,典型的是使用上面提到的方法。可以忽略苹果的建议使一个视图控制器关联另一个视图控制的的视图作为子视图,但是你需要在作为容器的视图控制器中手动的调用嵌套控制器的viewWillAppear和viewDidAppear。



在 iOS 5.0 以前,视图控制器容器只属于苹果系统所有,苹果不建议你自定义视图控制器容器。实际上,在视图控制器编程指南这一章中明确告知我们不要使用它。以前苹果公司对于视图控制器容器的总体描述是“一个管理整个屏幕内容的视图控制器”,而现在的描述是“一个包含本身视图内容的单元集合”。为什么苹果不希望我们自定义像tab bar controllers 和navigation controllers这样的视图控制器容器呢?更准确的说,下面这条语句会带来什么问题:

[viewControllerA.view addsubView:viewControllerB.view]

view-insertion@2x

UIWindow作为应用程序的根视图,负责监听和分发屏幕旋转和视图布局等消息。在上图中,ViewController的view插入到根视图控制器当中的一个视图中作为其子视图,那么这个view就不会再接收到UIWindow传来的消息,像viewWillAppear:这种方法就不会被调用。

在ios5.0以前我们自定义的视图控制器容器,将会持有子类视图控制器的一个引用,并且需要我们手动的传递在父类视图控制器中调用的事件消息给子类视图控制器,准确地完成这项工作太难了!

viewWillAppear: 出现多次

通知 跟 下一个对象出现 逻辑上处理细节
  • bellazhouyi
  • bellazhouyi
  • 2017年07月31日 11:15
  • 271

viewWillDisappear,viewWillAppear不调用的解决方法

产生原因是用了UINavigationController.  将UINavigationController的view作为subview添加到了其他viewController的view中...
  • u011374880
  • u011374880
  • 2016年03月10日 14:44
  • 2944

viewDidAppear什么时候调用?

遇到一个问题,以为viewDidAppear总会跟着viewWilApear后边调用,其实不然,一下是转载的内容做了一点修改(最后一段): 原文地址:http://blog.csdn.net/kmy...
  • jijiji000111
  • jijiji000111
  • 2015年12月13日 18:44
  • 1028

直接把View Controller的view addSubview到另一个View,则不会调用viewDidAppear viewWillAppear

如果是直接把ViewController的view 通过addSubview添加到另一个View,则不会调用viewDidAppear,你需要手动发送viewDidAppear给这个View Cont...
  • hherima
  • hherima
  • 2015年10月30日 17:25
  • 2526

iOS: viewWillAppear和viewDidAppear什么时候被调用

http://blog.csdn.net/workhardupc100/article/details/6954774 http://esyscn.com/forum.php?mod=vie...
  • totogogo
  • totogogo
  • 2012年05月25日 12:57
  • 3224

画面跳转各方法调用的时机-init、viewDidLoad、viewWillAppear、viewDidAppear、viewWillDisappear、viewDidDisappear

init:方法 在init方法中实例化必要的对象(遵从LazyLoad思想) init方法中初始化ViewController本身 loadView:方法 ...
  • itianyi
  • itianyi
  • 2013年02月21日 16:41
  • 13177

让viewDidAppear/viewWillAppear 在push/pop页面加载前始终调用

让viewDidAppear/viewWillAppear 在页面加载前始终调用 viewDidAppear/viewWillAppear in UINavigationController not ...
  • diyagoanyhacker
  • diyagoanyhacker
  • 2011年07月12日 17:31
  • 4090

关于IOS开发中addSubView上去的viewController的viewWillAppear 和viewDidAppear 等调用的总结

_viewController的常见的驱起方式包括:            1.  _viewController  presentModalViewController:          ...
  • ph496124577
  • ph496124577
  • 2012年08月16日 16:59
  • 1867

viewDidLoad, viewWillDisappear, viewWillAppear等区别及各自的加载顺序

viewWillAppear: Called when the view is about to made visible. Default does nothing视图即将可见时调用。默认情况下不执...
  • silva_831
  • silva_831
  • 2013年08月29日 13:55
  • 34098

addChildViewController与viewWillAppear、viewDidAppear关系说明

最近项目中使用addChildViewController时遇到了很诡异的问题,我们的用法如下,在ParentViewController的viewWillAppear中请求数据,请求数据成功之后使用...
  • zhaoxy2850
  • zhaoxy2850
  • 2016年03月08日 12:33
  • 4809
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:viewWillAppear和viewDidAppear什么时候被调用
举报原因:
原因补充:

(最多只允许输入30个字)