哪个更好:将子视图作为子视图添加到其父视图或直接将其视图分配给父视图?

时间:2015-06-29 13:52:16

标签: ios objective-c

问题实际上是关于正确的方法。例如:

[self addChildViewController:self.childViewController];
[self.view addSubview:self.childViewController.view];

//Set its bounds accordingly
CGRect viewRect = self.view.bounds;
self.childViewController.view.frame = viewRect;

这是优选的;

[self addChildViewController:self.childViewController];
self.view = self.childViewController.view;

这也很好吗?

编辑:预期子视图方法会更好。我不知道为什么第二个一开始没有引起任何问题但是后来它也崩溃了,所以,是的...感谢所有回答的人。

3 个答案:

答案 0 :(得分:1)

我认为将var found = false; arr.forEach(function(_object) { // code to set found to true if _object is what you need }); // if found is true, your array has your object, else it doesn't 指定为self.view并不是一个好主意。每当您想要向self.childViewController添加任何内容时,您实际上都会将其添加到self.view。你的代码会混淆不清。我会先选择。

如果您要更换整个self.childViewController,请不要在self.view方法中执行,只需在childViewController方法中交换视图并处理此特定{{1}中的视图1}}而不是孩子。

答案 1 :(得分:0)

将childViewController视图分配给父视图不是一个好习惯。分配可能会失去childViewController的控件,在这种情况下,您的应用可能会崩溃。因此,将childViewController视图作为子视图添加到父级是很好的。 即

[self addChildViewController:self.childViewController];
[self.view addSubview:self.childViewController.view]; 

答案 2 :(得分:0)

您不应该分配容器视图控制器的视图。它是一个容器,可能包含多个子视图控制器(例如,参见UITabBarController)。

相反,您应该将子视图控制器的视图作为子视图添加到容器视图控制器的视图中。

还要确保在子视图控制器中调用适当的方法(-didMoveToParentViewController等)。