Iphone 何时使用addChildViewController与pushViewController

Iphone 何时使用addChildViewController与pushViewController,iphone,uiviewcontroller,pushviewcontroller,addchild,Iphone,Uiviewcontroller,Pushviewcontroller,Addchild,我刚刚观看了2011年WWDC关于“实现UIViewController包容”的演示() 他们提到了将ViewController添加到屏幕的这两种方法,我希望能澄清一下最佳实践 添加ChildViewController/从ParentViewController移除 与@property(非原子,只读)NSArray*childViewControllers和[从viewcontroller:currentView到viewcontroller:nextView持续时间:选项:动画:完成:]

我刚刚观看了2011年WWDC关于“实现UIViewController包容”的演示()

他们提到了将ViewController添加到屏幕的这两种方法,我希望能澄清一下最佳实践

添加ChildViewController/从ParentViewController移除
与@property(非原子,只读)NSArray*childViewControllers和
[从viewcontroller:currentView到viewcontroller:nextView持续时间:选项:动画:完成:]一起使用

pushViewController:已设置动画:/PopViewController已设置动画
他们在演讲中很快就略过了这一点

在我的应用程序中,我使用所有自定义ViewController,直到今天,我一直使用:

[nextController performSelector:@selector(setDelegate:) withObject:self];
[currentPageController.view removeFromSuperview];
[self.view addSubview:nextController.view];
但我现在明白了这是一种糟糕的做法,我想知道使用“addChildViewController”的正确方法是什么,使用“pushViewController”的正确方法是什么


我真的很感激你对这件事的看法

是,
pushViewController:
用于管理视图控制器堆栈的导航控制器
addChildViewController:
另一方面,它是iOS 5功能“查看控制器包含”的一部分

这背后的基本思想是,您可以将视图控制器嵌入到自己的其他视图控制器中(例如,将iPhone应用程序移植到iPad时),从而轻松实现导航控制器、拆分视图控制器等功能

与您展示的实现类似的一个问题是,您只处理视图。视图控制器事件(如方向更改)将无法在层次结构中正确传递。视图控制器包含尝试确保所有包含的视图控制器也将获得适当的消息

在查看您的实现时,您还应该考虑您真正希望通过此实现什么。导航控制器可能是正确的选择,或者您甚至可能以模态方式显示下一个控制器(请参阅)。使用这些方法(例如导航控制器和模态视图)的好处是,用户已经熟悉这些导航技术

无论如何,这是一本关于如何在视图控制器之间转换的好读物


使用视图控制器包含时,基本上必须像往常一样将视图添加到包含视图中(即使添加了控制器,也必须这样做)。然后使用
addChildViewController:
将子视图控制器添加到周围的控制器中。您还必须通过
didMoveToParentViewController:
通知子控制器它已放入另一个控制器。您还可以使用
从ViewController:到ViewController:
的转换来交换一个视图控制器到另一个视图控制器,可以选择提供动画。

在使用新的“嵌入”将视图控制器嵌入容器视图控制器时-Xcode 4.5中的关系正在实现
addChildViewController
或其他仍然需要的方法?不幸的是,关于这一点的文档非常稀少,但我想已经为您调用了
addChildViewController:
。根据文档,我们可以看到调用了
didMoveToViewController:
执行
addChildViewController:
操作时自动执行。调用
removeChildViewController
@Timo时,只需执行
willMoveToViewController
,这是错误的,需要相反的操作。从文档中可以看到:“每当您想要添加新视图时,首先将新视图控制器添加为子视图。”链接:部分:“添加和删除子视图”Oops。道歉。DTs是正确的。我完全相反地提到它。删除评论。