像UIViews一样将UIViewControllers"嵌套"在其他UIViewControllers中是否明智?

Mel*_*emi 27 cocoa-touch uiviewcontroller uiview

无论如何,对于我来说,我有一个相当复杂的观点,它有一些带有自定义界面项的"托盘".它们滑入和滑出我的根视图.我想嵌套(addSubview)视图中的项目.在显示之前每个都需要一些设置......并且没有一个可以在IB中配置(它们是UIView的子类).

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

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

或者,我只是坚持使用UIViews并将子视图添加到子视图等等.

Jas*_*wig 29

在iOS 5.0之前,特别不建议这样做,因为不会调用嵌套视图控制器的生命周期事件 - viewWillAppear等.请参阅滥用UIViewControllers.

由于多个UIViewController的视图一次可见,其中一些控制器可能无法接收重要消息,如-viewWillAppear:或-didReceiveMemoryWarning.此外,可能无法按预期设置或更新某些属性(如parentViewController和interfaceOrientation).

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

- (void)addChildViewController:(UIViewController *)childController
Run Code Online (Sandbox Code Playgroud)

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


tba*_*tba 7

我正在尝试做同样的事情,但是Apple的文档劝阻了你的方法,该文档指出"你不应该使用视图控制器来管理仅填充其窗口一部分的视图 - 也就是说,只是该区域的一部分由应用程序内容矩形定义.如果您想要一个由几个较小视图组成的界面,请将它们全部嵌入到一个根视图中,并使用您的视图控制器管理该视图.

  • 很容易说"每个屏幕一个CV"和所有,但您并不总是希望所有子视图的所有代码都在同一个CV中.至少如果不止一个视图需要复杂的逻辑并且可能(可能)在其他视图层次结构中使用. (7认同)
  • 换句话说,"每个应用程序的屏幕都有一个ViewController". (5认同)