27

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

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

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

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

4

3 回答 3

29

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

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

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

- (void)addChildViewController:(UIViewController *)childController

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

于 2012-02-24T21:10:17.780 回答
7

我正在尝试做同样的事情,但 Apple 的文档阻止了您的方法,该文档指出“您不应使用视图控制器来管理仅填充其窗口的一部分的视图,即仅填充该区域的一部分"

于 2009-08-12T21:22:14.877 回答
1

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

一切正常。

原谅我的英语。

于 2009-07-17T04:26:11.063 回答