【发布时间】:2011-04-10 22:08:55
【问题描述】:
我最近发现UIViews 在填满整个窗口时应该只有UIViewControllers(或者由另一个UIViewController 管理,例如UINavigationController 或UISplitViewController)。此引用来自UIViewController 的文档:
您不应使用视图控制器来管理仅填充其窗口的一部分的视图,即仅填充由应用程序内容矩形定义的区域的一部分。如果您想拥有一个由多个较小视图组成的界面,请将它们全部嵌入到一个根视图中,并使用您的视图控制器管理该视图。
我通常将视图逻辑放在 UIView 中,即使它由 UIViewController 管理,但我经常发现自己需要访问 UIViewController 的属性,例如它的 navigationController 属性。但是,UIView 不应该知道它们的 UIViewController。
我的结论是视图逻辑应该在 UIView 的 UIViewController 存在时进入,否则在 UIView 本身中。
或者,为 不是 UIViewController 子类的视图创建控制器类是否更好? UIPopoverController(一个 NSObject 子类)似乎遵循这种模式,尽管在大多数情况下(UIButton 等)视图似乎没有专用的控制器类。
【问题讨论】:
-
另外,UIViewControllers 是否应该在没有 nib/xib 文件的情况下使用(即,在代码中创建的 UIView)?
-
就我个人而言,我很少使用 NIB 文件,所以是的,你完全可以使用 UIViewController 和没有它们的朋友。
-
-initWithNibName:bundle: 是 UIViewController 的指定初始化器这一事实似乎表明它不打算在没有 nib 的情况下使用。
-
而
initWithNibName:bundle:的参数名称是nibNameOrNil和bundleOrNil,这表明它打算以任何一种方式使用。 -
@Alex:有趣的花絮,谢谢。
标签: cocoa-touch model-view-controller design-patterns uiviewcontroller ios