在 IOS 4.x 或更低版本中,将子视图添加到视图时不会调用 viewDidAppear 方法,为啥?
Posted
技术标签:
【中文标题】在 IOS 4.x 或更低版本中,将子视图添加到视图时不会调用 viewDidAppear 方法,为啥?【英文标题】:In IOS 4.x or lower, viewDidAppear method is not getting called while adding subview to a view, why?在 IOS 4.x 或更低版本中,将子视图添加到视图时不会调用 viewDidAppear 方法,为什么? 【发布时间】:2011-11-11 03:19:41 【问题描述】:在 ios 4.x 或更低版本中,viewDidAppear 和 viewWillAppear、viewDidDisappear 和 viewWillDisappear 等 ViewController 的委托方法不会被调用。同样的方法在 iOS 5.x 上也能正常工作。
为什么?这是 iOS 4.x 或更低版本中的错误。因为在 iOS 5.x 中,所有这些方法都以正确的方式和顺序调用。
提前致谢, 农历
【问题讨论】:
您能解释一下您是如何得出他的结论的吗?您是否从这些在 iOS5 中显示但在 iOS4 中不显示的方法记录了一些内容? 是的,我也使用过 NSLog 和断点...也在模拟器和设备上尝试过。 这取决于您的 viewController 层次结构,您如何管理您的内容 viewController 和容器 viewController。 是什么意思?如何管理视图层次结构.. 【参考方案1】:对于 IOS4.x,我使用 UINavigationController 委托方法,如下所示:
-(void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated
if (SYSTEM_VERSION_LESS_THAN(@"5.0"))
[activeView viewDidAppear:YES];
-(void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
if (SYSTEM_VERSION_LESS_THAN(@"5.0"))
[activeView viewWillAppear:YES];
我希望这会有所帮助!
【讨论】:
【参考方案2】:如果您的视图控制器是另一个视图控制器的子级(即它是 UIViewController 内的 UINavigationController,反之亦然等),则不会调用子级的 viewDidAppear、viewWillAppear 等方法。解决方案是让父母像这样调用它们:
-(void)viewWillAppear:(BOOL)animated
[super viewWillAppear:animated];
[child viewWillAppear:animated];
我知道这发生在 iOS 4.3 上。在 iOS 5 中有一组专门用于处理这些情况的新方法:Implementing a Container View Controller
【讨论】:
以上是关于在 IOS 4.x 或更低版本中,将子视图添加到视图时不会调用 viewDidAppear 方法,为啥?的主要内容,如果未能解决你的问题,请参考以下文章
iOS v10 或更低版本:如何以编程方式在导航栏底部添加 UISearchController