之前在 iOS 4.3 中编码时,我发现将视图控制器的视图添加到另一个视图时[superview addSubView:controller.view]
,控制器实例将不会收到-viewWillAppear/viewDidAppear
消息,比我在堆栈溢出的某些线程中发现了同样的问题。之后我手动调用-viewWillAppear/-viewDidAppear
如所须。
但是,升级到iOS 5.0
, 一些活泼的UIView
行为发生了。最后我发现在iOS 5中,[superview addSubView:controller.view]
,将发送一个-viewWillAppear/-viewDidAppear
自动发送到控制器实例的消息,加上我的手动调用,每次控制器执行其行为时,都会有两条重复的消息。
而且我还发现了类似的问题:iOS 5:在 iPad 中关闭模式后不会调用 -viewWillAppear https://stackoverflow.com/questions/7802673/ios-5-viewwillappear-is-not-called-after-dismissing-the-modal-in-ipad
现在的问题是,在搜索苹果的文档后,我没有找到任何关于这些问题的明确差异文档。我什至想知道这是否是 iOS 5.0 中有保证的视图生命周期行为。
有没有人修复类似的问题或找到一些关于这些差异的指南。因为我想在以下位置运行我的应用程序4.x & 5.x iOS
.
在 iOS 4 中你必须手动调用-viewWillAppear
, -viewWillDisappear
从视图层次结构中添加或删除视图时等。如果在 iOS 5 中添加视图或从视图中删除视图,则会自动调用这些函数。window等级制度。幸运的是,iOS 5 有一个方法UIViewController
您可以覆盖它以将行为恢复到 iOS 4 的工作方式。只需将其添加到您的UIViewController
:
-(BOOL)automaticallyForwardAppearanceAndRotationMethodsToChildViewControllers {
return NO;
}
只要您同时支持 iOS 4 和 iOS 5,这可能是最简单的解决方案。一旦放弃对 iOS 4 的支持,您可能会考虑修改代码以在交换视图时使用较新的方法。
2012 年 2 月 5 日编辑
显然这个功能需要使用以下方法将子视图控制器添加到主视图控制器addChildViewController:
方法。 iOS4中不存在此方法,因此您需要执行以下操作:
if ([self respondsToSelector:@selector(addChildViewController:)] ) {
[self addChildViewController:childViewController];
}
感谢所有纠正我这一点的人。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)