使用自定义视图控制器管理同一视图层次结构的不同部分

时间:2010-12-02 09:56:00

标签: iphone cocoa-touch uiview uikit uiviewcontroller

View控制器编程指南说明了有关视图控制器用法的信息:

  

每个自定义视图控制器对象   create负责管理所有人   在单个视图中的视图   层次结构。在iPhone应用程序中   视图层次结构中的视图   传统上覆盖整个屏幕,   但在iPad应用程序中他们可能会   仅覆盖屏幕的一部分。   一对一的对应关系   视图控制器及其中的视图   视图层次结构是关键设计   考虑。 你不应该使用   多个自定义视图控制器   管理相同的不同部分   查看层次结构。同样,你   不应该使用单个自定义视图   控制器对象来管理多个   屏幕值得内容。

据我所知,如果我们使用多个自定义视图控制器来控制视图的各个部分(即视图控制器来管理主视图的子视图,而主视图又由视图控制器管理),则默认方法如下:

didReceiveMemoryWarnings
viewWillAppear
viewWillDisappear
viewDidUnload

等。不会被称为。

除此之外,我们不应该使用多个视图控制器来管理视图的相应子视图吗?

该文档还提供了另一种解决方案,其内容如下:

  

注意:如果要分割视图   层次结构分为多个子区域和   分别管理每一个,使用   通用控制器对象(自定义   来自NSObject的对象)   而不是视图控制器对象   管理每个分区。然后用一个   查看控制器对象来管理   通用控制器对象。

但是没有提及为什么不应该首选多个视图控制器。我的问题是:

为什么我们不应该这样喜欢呢?

我很担心,因为我更喜欢使用UIViewController的子类来管理我的视图,因为我每次从nib加载它们并且我为每个视图控制器分隔nib。在项目的后期阶段变得容易满足变化。这是错的吗?我是否必须改变我的编程风格,或者如果我采用这种方法可以吗?

谢谢,

拉​​吉

2 个答案:

答案 0 :(得分:3)

好吧,我会说“只要它有效”,你可以像往常一样继续做! 但为了让事情“更清洁”,我会使用自己的物品。 由于ViewControllers在设计时考虑了其他一般功能(例如使用导航控制器和标签栏控制器),这使得它对于简单的使用来说有点“沉重”,就像你一样。 另外,正如您所提到的,只有在将viewController的视图添加到主窗口时才会调用某些事件。

您不能在Interface Builder中使用自己的对象吗?如果你创建一个(或几个)UIView IBOutlet,它应该是相同的。

答案 1 :(得分:0)

我有一个在单个屏幕上使用两个UIViewControllers的应用程序。子是一个UITableViewController。我不依赖于孩子的任何UIViewController行为 - 只有UITableViewController方法。这很方便,因为在其他情况下,子UITableViewController管理整个屏幕。在这种情况下,它确实使用UIViewController方法。可疑的设计?也许。它已经工作了两年了。但我不确定我会推荐这种模式。