什么时候需要使用视图控制器?

时间:2010-06-13 19:55:43

标签: iphone uiview uiviewcontroller

我正在深入研究iPhone开发,我试图了解其中一个核心概念是视图控制器。如果你查看apple dev网站上的GLPaint示例,你会看到一个项目......

  1. 应用委托类
  2. uiwindow子类
  3. 和uiview子类
  4. uiview子类实现了所有核心图形绘制逻辑并处理触摸事件。我的问题是......

    1. 为什么没有实现视图控制器来处理该视图逻辑?
    2. 您是否可以使用视图控制器来实现该逻辑,还是必须在uiview子类中实现?
    3. 最后,何时应该使用视图控制器来实现视图逻辑代码?
    4. 非常感谢您的帮助!

3 个答案:

答案 0 :(得分:2)

视图知道如何与用户交互。它知道如何显示某些数据,如何处理事件以及如何向用户提供反馈。

视图控制器知道什么,但现在如何。它知道要显示的数据以及响应用户操作的操作。

UIButton知道如何显示标题和图片,以及如何跟踪点击,但不知道标题应该是什么或点击后该做什么。

UITableView知道如何在单元格中显示数据以及如何处理编辑,但它不知道删除单元格时要显示的数据或要执行的操作。为此,它使用委托和数据源,它通常是一个视图控制器。

简化设计和维护之间的划分。您可以为每种类型的表逻辑创建tableview的子类,但是您也不能控制其他视图。视图控制器可以控制多个视图并在它们之间进行协调。

编辑:

因此,您应该在需要时使用视图控制器:

  • 多个视图之间的坐标。
  • 模型数据和视图之间的坐标。
  • 响应用户与视图的互动。
  • 卸载并重新加载视图。

请注意,视图控制器不是严格意义上的UIViewController。您可能拥有一个由UIViewController拥有的视图控制器并处理一些视图,但它是从NSObject或其他任何视图派生的。视图控制器管理以UIViewController为根的视图层次结构的某些部分,并由该UIViewController拥有。 UIViewController又可以是以应用程序委托为根的层次结构的一部分,并且可能由导航,选项卡或其他元控制器拥有。

因此,应用程序委托拥有零个或多个元控制器,如UINavigationController。每个元控制器都拥有一个或多个UIViewControllers。其中每个都拥有一个视图层次结构,可能拥有几个简单的视图控制器,可帮助管理视图层次结构的各个部分。如果不需要元控制器,则应用程序委托可以拥有或成为UIViewController。

答案 1 :(得分:1)

如果您需要在视图控制器中找不到视图中的功能(反之亦然),您将知道要使用哪些功能。对于您的问题2,例如,drawRect回调可在UIView中使用,但不能在UIViewController中使用。

到目前为止,只要涉及UIViewController,我就会使用.xib

我喜欢在NSTimer viewWillAppear viewDidAppearviewWillDisapper方法中进行初始化和清理代码(例如viewDidAppear)。当处理许多模态弹出窗口和多个视图控制器时,它在单个入口/出口点的团队中特别方便。

答案 2 :(得分:0)

视图控制器主要适用于应用程序的全屏部分,您可以在界面构建器中进行布局。每个视图控制器都有一个view属性,指向UIView或其子类之一,但它们管理的不止于此。 View控制器总是全屏,所以它可以实现像shouldRotateToInterfaceOrientation这样的东西:虽然屏幕上可能有5个UIViews,但只能有一个视图控制器。

它也是MVC(模型 - 视图 - 控制器)的重要组成部分。

视图控制器连接视图和模型。理论上,该模型应该做数学的东西,并存储数据,以及其他非UI的东西。视图应该绘制和管理。它不应该存储内容,它不应该做任何其他事情,真的。视图控制器将两者连接在一起。它可以从模型中查找数据,并将其提供给视图。这样,代码更少的是特定于应用程序的。您可以重用模型和视图,但大多数情况下,如果不进行修改就很难重用控制器。

我不是专家,所以为了澄清,请发表评论。