"viewWillAppear" 不会在 xcode 4.5 和 iphone 4.3 模拟器中调用,但如果它在 iPhone 5.0 或 iPhone 6.0 模拟器中运行,则会调用此方法。
为什么?当控制器的视图出现在 ios 4.3 中时,如果我想做某事,我该怎么办?
根据您的评论,问题似乎是 iOS 4 中缺少容器视图控制器。从 5+ 开始,您明确意味着能够将view
任何控制器的视图添加到任何其他*的视图中,这将生成适当view[Will/Did]Appear
的,以及所有其他较新的消息 -viewDidLayoutSubviews
等。
在 4 中,您没有被明确允许构建容器视图控制器,并且没有故意的、特定的向后链接将视图连接回其控制器。
结果,当您将导航控制器添加到视图时,它不会得到viewDidAppear
. 因为它不知道它的视图已经出现,所以它不会告诉它包含的任何控制器他们的视图已经出现。
也许你能做的最好的事情就是通过(i)检查你是否在 iOS 4 下运行来解决这个问题;(ii) 如果是这样,viewWillAppear/viewDidAppear/viewWillDisappear/viewDidDisappear
向您包含的控制者发布虚假信息。
根据个人经验,iOS 4(至少在 4.3 中)确实实现addChildViewController:
了,但并没有像后来的文档版本那样做。因此,尽管它不是一个完全准确的功能检查,但我倾向于使用它if([self respondsToSelector:@selector(presentingViewController)])
来确定是否需要手动传播这些消息。
[*] 你也应该打电话addChildViewController:
确保所有消息在各个方向正确移动
我认为这可能与“视图控制器滥用”有关。检查您的容器视图控制器是否使用正确。详细可以参考这篇文章。