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

时间:2009-10-03 15:45:57

标签: iphone objective-c

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

  

警告:如果视图属于   视图控制器被添加到视图中   层次结构直接,视图   控制器不会收到这个   信息。如果插入或添加视图   到视图层次结构,它有一个   查看控制器,你应该发送   相关的视图控制器   消息直接。没发送   查看控制器此消息将   阻止任何相关的动画   正在展示。

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

1 个答案:

答案 0 :(得分:5)

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

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

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

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