Cocoa touch “是否明智?”;巢;UIViewControllers中的其他UIViewControllers是否与您的UIViews相同?

Cocoa touch “是否明智?”;巢;UIViewControllers中的其他UIViewControllers是否与您的UIViews相同?,cocoa-touch,uiview,uiviewcontroller,Cocoa Touch,Uiview,Uiviewcontroller,我有一个相当复杂的视图,对我来说,它有一些带有自定义界面项的“托盘”。它们滑入滑出我的根视图。我想在视图中嵌套(addSubview)项。每一个都需要在显示之前进行一些设置…并且没有一个可以在IB中配置(它们是UIView的子类) 我想知道为每个“托盘”子类UIViewController是否有意义,然后让VC的view属性指向“托盘”视图,我可以用自定义UIView对象填充该视图。这样我就可以利用viewDidLoad等。。。UIViewController中的方法 我不知道还有其他人这样做—

我有一个相当复杂的视图,对我来说,它有一些带有自定义界面项的“托盘”。它们滑入滑出我的根视图。我想在视图中嵌套(addSubview)项。每一个都需要在显示之前进行一些设置…并且没有一个可以在IB中配置(它们是UIView的子类)

我想知道为每个“托盘”子类UIViewController是否有意义,然后让VC的view属性指向“托盘”视图,我可以用自定义UIView对象填充该视图。这样我就可以利用viewDidLoad等。。。UIViewController中的方法

我不知道还有其他人这样做——至少在我看过的几个样本中是这样。这将造成一种情况,即屏幕上同时显示多个视图控制器。从导航控制器本身到rootViewController及其视图,再到任意数量(屏幕大小允许)的这些小型TrayViewController。如果是这样,那么响应者链是如何工作的?我假设它会从最低的UIView到它的封闭VC,然后到那个VC的父视图,然后是那个视图的VC,等等。重复,重复。。直到应用程序。。。我是在自找麻烦吗


或者,我只是坚持使用UIView并将子视图添加到子视图中,等等。

我对您尝试做的事情的体验很好。我尽量使nib文件尽可能简单,所以我采用任何可能的“子视图”,并用自己的视图控制器将其封装在自己的nib文件中,因此我最终使用嵌套的视图控制器。 在我的一个应用程序中,我有一个非常复杂的表视图单元格,它有一个子视图。因此,我最终得到了这样一个层次结构:顶层的tableview控制器,每行的tableviewcell控制器,以及每行中每一行的子视图的子视图控制器

一切正常


请原谅我的英语。

我也在尝试做同样的事情,但被苹果公司劝阻了,苹果公司说您不应使用视图控制器来管理仅填充其窗口一部分(即应用程序内容矩形定义的区域的一部分)的视图。如果您希望有一个由多个较小视图组成的界面,请将它们全部嵌入到一个根视图中,并使用视图控制器管理该视图。“

在iOS 5.0之前,不建议这样做,因为嵌套视图控制器的生命周期事件(ViewWillExisten等)不会被调用。请参阅

当多个UIViewController的视图同时可见时,其中一些控制器可能无法接收到重要消息,如-ViewWillDisplay:或-didReceiveMemoryWarning。此外,它们的某些属性(如parentViewController和interfaceOrientation)可能无法按预期进行设置或更新

添加了iOS 5.0,通过添加子视图控制器正确处理这些生命周期事件

- (void)addChildViewController:(UIViewController *)childController

我花了无数个小时试图让嵌套视图控制器在iOS 4中工作。我最终做到了,但它需要大量容易出错的粘合代码。然后我在文档中看到了警告。

这正是我试图做的,因此如果你这样做,请发布更多详细信息!我相信这是假设组合,即所有较小的视图“同时出现在屏幕上。我不认为它考虑了交换的子视图。换句话说,“每个应用程序屏幕一个ViewController”。说“每个屏幕一个CV”和所有这些都很容易,但你并不总是希望所有子视图的所有代码都出现在同一个CV中。至少如果多个视图需要复杂的逻辑,并且可能会出现这种情况,就不需要了(可能)在其他视图层次结构中使用。只需在其他viewcontroller中定义viewcontroller实例嵌套视图控制器而不使用新的容器视图控制器方法(或手动调用生命周期方法)将导致错误有关如何在viewcontroller中添加子视图的以下链接