将视图控制器添加到视图层次结构的正确方法是什么?

Dou*_*yle 6 iphone objective-c

我有一个视图控制器(A)加载视图控制器(B)并在我的视图层次结构中使用它的视图.如果我将B的视图添加到A的视图层次结构中,并且我不手动转发像viewWillAppear这样的事件,我无法在B控制器中处理它们.(来自viewWillAppear:docs)

警告:如果属于视图控制器的视图直接添加到视图层次结构中,则视图控制器将不会收到此消息.如果向视图层次结构插入或添加视图,并且它具有视图控制器,则应直接向关联的视图控制器发送此消息.未能发送视图控制器此消息将阻止显示任何关联的动画.

嵌套视图控制器的正确方法是什么?(就像NavBarController那样.)如果只是需要将一组事件转发到嵌套控制器的问题,那么我需要转发的所有事件是什么?

Mat*_*her 5

这里没有神奇的解决方案.正确的解决方案是手动发送这些消息.

viewWillAppear:/ viewDidAppear:和viewWillDisappear:/ viewDidDisappear:消息是您手动发送到子视图控制器所需的唯一消息.

您应该在父视图控制器中实现所有这四个方法,并在父级接收到消息并加载子级时将相同的消息发送到子视图控制器.

此外,当您添加子视图控制器的视图时,如果父视图的view.window为非零,则应发送viewWillAppear:/ viewDidAppear:消息.删除视图时,如果父视图的view.window为非零,则应发送viewWillDisappear:/ viewDidDisappear:消息.