2012-12-11 34 views
-1

“viewWillAppear”在iphone 4.3仿真器中未在xcode 4.5中调用,但如果它在iPhone 5.0或iPhone 6.0仿真器中运行,则会调用此方法。“viewWillAppear”在iPhone 4.3仿真器中未调用xcode 4.5

为什么?如果我想要在控制器的视图出现在ios 4.3中时执行某些操作,我该怎么办?

+0

什么动作导致视图出现? – Tommy

+0

我使用“pushViewController”,所以视图将会出现。 – Sing

+0

而且是以模态方式呈现的'UINavigationController',或者是根视图控制器?我试图消除的是你可能试图在正式实施之前使用子视图控制器。 – Tommy

回答

1

我认为这可能与“查看控制器滥权”正确移动。检查您的容器视图控制器是否正确使用。详情请参阅this post

1

根据您的意见,问题似乎是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:,以确保所有的信息在各个方向