将UIViewController
的view
添加到另一个UIViewController
的view
中,这样做是明智的吗?
请解释为什么这是好的做法或者是不好的做法。
将UIViewController
的view
添加到另一个UIViewController
的view
中,这样做是明智的吗?
请解释为什么这是好的做法或者是不好的做法。
苹果公司以及遵循苹果指南的大多数人都会告诉你这是一种不好的做法,并且苹果为此添加了ViewController包含(childViewControllers)。不幸的是,大多数人盲目地遵循这个惯例,并且不会告诉您为什么这是不好的做法。我很高兴你问了这个问题。
事实上,在模型-视图-控制器体系结构中,视图应该是可重复使用的,无论它们包含的内容如何,因此控制视图内容的对象和视图本身不应该相同。这正是UIViewController所做的事情,但在iOS5之前,尽管这是一个非常合理的做法,苹果公司仍然不鼓励您使用多个UIViewController。当然,这令人困惑,许多人忽略了这些指南,还是这样做了,包括我自己。应用程序运行良好,并通过应用商店的验证,这导致更多的混乱。 结果是到今天,人们仍然对此提出问题,甚至在苹果公司屈服并给我们自定义容器ViewController一年多之后,问题仍然存在。我经常看到人们对此问题作出复杂的回答,例如基于非常简单的问题重新创建UIViewController类,而不知道为什么苹果公司反对使用UIViewControllers。
由于将ViewController的视图作为子视图添加通常可以完美工作,并且iOS4中不存在ViewController包含,而许多人仍然支持该版本,因此太多人不愿意使用ViewController包含。它是更干净的解决方案,当您想在ViewController中使用ViewControllers时,应尽可能使用它。如果不能,在大多数情况下,您应该能够将ViewController的视图简单地添加为子视图,只需知道在哪些情况下这样做即可。
以下是如果您只是将ViewController的视图添加到另一个视图中,可以期望的结果:
我绝对不会鼓励这样做,但也不会反对。这是一种情境性的问题,如果您不再需要支持iOS4,那么大多数情况下都可以避免使用它。但是,如果您记住以上列表,它也不会造成任何损
这是复杂视图层次结构中常见的情况。自iOS 5以来,UIViewController
使您能够添加子视图控制器。当您添加子控制器时,您也将子视图添加到控制器的视图中。
另一方面,您不应该将视图控制器的视图添加到另一个视图控制器中,而不将其作为子视图控制器添加。
然而,不要滥用它。您应该在以下情况下这样做:
UINavigationController
或UISplitViewController
)你可能可以这样做,但可能有更好的方法。似乎合理的想法是两者都会尝试操作视图。我的答案是否定的。
你想要实现什么目标?
addSubview:
添加视图。那么类变量与此有什么关系? - mattjgalloway
UINavigationController
中,它的行为很奇怪。 - Sulthan