【发布时间】:2011-08-11 04:27:59
【问题描述】:
在下图所示的应用程序中,我目前正在使用三个 UIViewController:一个主视图控制器,一个用于主菜单,一个用于由主菜单启动的设置屏幕。随着我更多地了解 UIViewController 的工作原理以及它的设计目的,我在质疑我的架构的智慧。
在我看来,子类化的主要目的是能够覆盖在控制器生命周期中自动调用的方法:viewDidAppear、viewWillAppear、willRotateToInterfaceOrientation 等。看来这些方法只有在以下情况下才会被调用UIViewController(或子类)是 UIViewController 层次结构的一部分。因此,继承 UIViewController 是没有意义的,除非我要使用创建视图控制器层次结构的标准方法之一,即 UINavigationController、[UIViewController presentModalViewController] 等。
我对使用 Cocoa 风格的方式将视图控制器添加到层次结构中持谨慎态度,因为它们似乎都非常具有限制性。例如,我可以使用 [UIViewController presentModalViewController] 显示我的设置屏幕,但我不希望它遮挡整个屏幕。即使设置屏幕可见,我也希望用户能够与之交互的背景动画。
这是我的问题:
1) 继承 UIViewController 是否愚蠢,除非我打算通过 Apple 的一种技术将它添加到 viewController 层次结构中?
2) 我的假设是否正确,即显示新视图的内置方法对我来说太严格了,为了获得我想要的灵活性,我只需要通过 [view添加子视图]
3) 如果子类化 UIViewController 确实对我的菜单和设置视图没有意义,我应该如何避免将所有代码放在一个怪物 UIViewController 子类中。当我使用 [NSBundle loadNibNamed] 加载 nib 时,我是否应该只将 NSObject 子类化,添加适当的 IBOutlets 和 IBActions 并将其作为文件所有者传递?
【问题讨论】:
标签: iphone ios ipad uiviewcontroller