0

我开始在 Xcode 上开发 iPhone,但我不明白 View 和 View Controller 之间或 Table View 和 Table View Controller 之间的区别。有人有简单的解释吗?

4

3 回答 3

2

让我们先到 theUIViewUIViewControllerclass

UIViewController是为管理 UIViews 而构建的 Cocoa Touch 类。它期望有一个视图层次结构,但您不会“自动”获得一个视图(这有点不准确;请参阅下面的编辑)。通常你会通过调用initWithNibName你的视图控制器来获得视图。

Interface Builder 中有一些内置的魔法,它知道如果 File's Owner 是一个UIViewController(或子类),则有一个名为 view 的属性。就是这样。

一旦你链接了一个视图控制器和一个视图,视图控制器会为你做很多工作:它注册为视图触摸事件的响应者,注册设备旋转通知(如果你愿意,它会自动处理它们),帮助您负责动画的一些细节,并半自动处理低内存条件。

如果您不initWithNibName手动调用或设置视图属性,则视图属性获取器将在视图为零时调用 loadView。loadView 的默认实现将查看您是否设置了 nibBundle 和 nibName 并尝试从那里加载视图(这就是为什么大多数时候您不必调用 initWithNibName),但如果这些属性没有设置,它将使用默认值实例化一个 UIView 对象。所以从技术上讲,是的,它确实会自动附带它自己的UIView,但大多数时候这没什么价值。

现在来到 TableView 和 UITableViewController 类

ATableViewControllerViewController内置 TableView 的。这将具有已声明和设置所需的委托方法。这个 VC 已经是一个 TableView 委托和数据源。它无法调整大小。优点是易于使用,缺点是灵活性非常有限。

ATableView就是一个 TableView(的子类UIView)。它可以添加到 ViewController 并调整大小,与另一个基于视图的对象一起使用等。优点是灵活性,缺点是您必须自己设置委托和数据源方法(在我看来,非常值得花时间去获得灵活性)。

另一个注意事项是,当使用新的静态 TableView 单元格(iOS5 的一部分)时,您必须使用 TableViewController。

另请查看以下链接以获取有关方法的详细说明。

视图和视图控制器

什么是控制器类?

UIView 和 UIViewController 有什么区别?

我可以创建的 RootViewController、AppDelegate 和 View Controller 类之间有什么区别?

于 2012-10-16T09:53:01.903 回答
1

视图和它的控制器之间的区别可以在模型-视图-控制器模式的上下文中正确地描述(也可以看看这篇文章):

视图是其模型的(视觉)表示。它通常会突出模型的某些属性并抑制其他属性。因此,它充当演示过滤器。

视图附加到其模型(或模型部分),并通过提问从模型中获取演示所需的数据。它还可以通过发送适当的消息来更新模型。所有这些问题和消息都必须在模型的术语中,因此视图必须知道它所代表的模型属性的语义。

控制器是用户和系统之间的纽带。它通过安排相关视图在屏幕上的适当位置呈现自己,为用户提供输入。它通过向用户提供菜单或其他提供命令和数据的方式来提供用户输出方式。控制器接收此类用户输出,将其转换为适当的消息并将这些消息传递给一个或多个视图。

这个想法是视图负责模型中包含的数据的可视化表示;控制器大致负责视图和模型之间的用户交互和通信。

这适用于 and 之间的关系,UIView以及 and之间UIViewController的关系等。还要注意的是,虽然/没有提供模型类(因为它们是非常广泛的类,所以模型可以是任何东西),/确实以表数据源的形式定义模型和它。UITableViewUITableViewControllerUIViewUIViewControllerUITableViewUITableViewControllerUITableViewDataSource

于 2012-10-16T09:56:03.207 回答
0

顾名思义,视图控制器是一个控制它管理的“视图”的实体。所以你不会将视图控制器渲染到屏幕上。您只需渲染视图。可以将视图呈现到屏幕上。它可以接受触摸事件、手势等。它可以包含许多其他子视图,也可以是另一个视图的子视图。但是拍下这整张照片。是什么用它们的机制管理所有这些视图(和子视图)?那是视图控制器。视图控制器是一个包含视图组合的对象,它管理这些视图的工作方式。

于 2012-10-16T09:53:45.480 回答