gpt4 book ai didi

iphone - iOS:iOS 4.3 和 5.0 之间的不同 addSubview 行为

转载 作者:IT王子 更新时间:2023-10-29 07:49:55 24 4
gpt4 key购买 nike

之前在 iOS 4.3 中编码时,我发现当使用 [superview addSubView:controller.view] 将 View Controller 的 View 添加到另一个 View 时, Controller 实例将不会收到 -viewWillAppear/viewDidAppear 消息,我在堆栈溢出的某个线程中发现了同样的问题。之后,我根据需要手动调用 -viewWillAppear/-viewDidAppear

但是,在升级到 iOS 5.0 之后,一些活泼的 UIView 行为发生了。最后我发现在 iOS 5 中,[superview addSubView:controller.view] 会自动向 Controller 实例发送一条 -viewWillAppear/-viewDidAppear 消息,加上我手动发送的消息调用,每次 Controller 执行其行为时都会有两个重复的消息。

我也发现了类似的问题:iOS 5 : -viewWillAppear is not called after dismissing the modal in iPad

现在的问题是,在搜索苹果的文档后,我没有找到任何关于这些问题的明确文档。我什至想知道这是否是 iOS 5.0 中有保证的 View 生命周期行为。

有没有人解决类似的问题或找到一些关于这些差异的指南。因为我想在 4.x 和 5.x iOS 中运行我的应用程序。

最佳答案

在 iOS 4 中,在从 View 层次结构中添加或删除 View 时,您必须手动调用 -viewWillAppear-viewWillDisappear 等。如果在 window 层次结构中添加或删除 View ,在 iOS 5 中会自动调用这些方法。幸运的是,iOS 5 在 UIViewController 中有一个方法,您可以覆盖该方法以将行为恢复到它在 iOS 4 中的工作方式。只需将其添加到您的 UIViewController 中:

-(BOOL)automaticallyForwardAppearanceAndRotationMethodsToChildViewControllers {
return NO;
}

只要您同时支持 iOS 4 和 iOS 5,这可能是最简单的解决方案。一旦您放弃对 iOS 4 的支持,您可能会考虑修改代码以在交换 View 时使用更新的方法。

2012 年 2 月 5 日编辑

显然,此函数需要使用 addChildViewController: 方法将 subview Controller 添加到主视图 Controller 。 iOS4中没有这个方法,所以你需要做这样的事情:

  if ([self respondsToSelector:@selector(addChildViewController:)] ) {
[self addChildViewController:childViewController];
}

感谢所有在这方面纠正我的人。

关于iphone - iOS:iOS 4.3 和 5.0 之间的不同 addSubview 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7830830/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com