何时将UIViewController子类化为自定义子视图?

时间:2011-03-27 14:57:51

标签: iphone ios uiview uiviewcontroller subview

我已经看到自定义子视图实现为UIViewController子类,但可能已经实现为UIView子类。

我应该何时将UIViewController而不是UIView作为子视图的子类?子类化UIViewController是否有任何缺点?

4 个答案:

答案 0 :(得分:6)

就个人而言,当我需要一些重要的逻辑时,我会使用UIViewController子类。此外,如果我正在寻找您从UIViewController获得的某些行为,例如以模态方式或在导航控制器中呈现它。

如果你做的事情相当简单或轻量级,UIView子类通常就足够了。在制作自定义按钮和表格视图单元格时,我似乎经常使用它们。

根据我的经验,我发现自己使用了比UIViewController子类更多的UIView子类,但这可能不是最好的,只是碰巧使用视图控制器而不是直截了当的观点。

答案 1 :(得分:4)

看看Apple在Controller Objectsthe MVC design pattern

上的评论

在iOS控制器中,通常需要至少填写以下角色之一:

  1. 协调控制器提供特定于应用程序的逻辑。它们响应委托消息,通知和IBActions。协调控制器还可以设置其他对象之间的连接,并经常管理这些对象的创建和销毁。

  2. 查看控制器,特别是UIViewControllers,管理一个“屏幕”内容的显示并触发转换到下一个“屏幕”。它们响应记忆警告和轮换事件。

  3. OS X中存在中介控制器,但它们的角色通常由iOS中的视图控制器填充。它们充当观点和模型之间的中介;在视图接收输入时更新模型,并在模型更改时更新视图。

  4. 如果您要实现的行为符合其中一个类别,则可能需要创建一个控制器对象。如果您的逻辑仅涉及数据显示(并可能响应用户输入),那么它可能属于视图层。如果您的逻辑是关于数据本身,那么它可能属于模型。 如果您无法在任何这些层中找到适合您的逻辑的那么,那么您可能应该将其作为不同职责的组合进行建模,这些职责属于不同层中的不同对象。即请求数据从中介视图控制器显示的视图。

答案 2 :(得分:2)

如果您要在“视图”中使用AdBannerView,您还可以继承UIViewController。 AdBannerView需要一个UIViewController才能工作。

答案 3 :(得分:1)

我遵循的拇指规则是,如果您正在进行自定义绘图,则子类UIView。否则,继承UIViewController。