我在Xcode上开始iPhone开发,我没有得到View和View Controller之间或者Table View和Table View Controller之间的区别。有没有人有一个简单的解释?
答案 0 :(得分:2)
让我们先到UIView
和UIViewController
课程
UIViewController
是为管理UIViews而构建的Cocoa Touch类。它期望具有视图层次结构,但您不“自动”获取视图(这稍微不准确;请参阅下面的编辑)。通常,您可以通过在视图控制器上调用initWithNibName
来获取视图。
Interface Builder中有一些内置的魔法,它知道如果File的Owner是UIViewController
(或子类),则有一个名为view的属性。就是这样。
链接视图控制器和视图后,视图控制器会为您完成相当多的工作:它注册为视图触摸事件的响应者,注册设备旋转通知(并自动处理它们,如果您愿意),帮助您处理动画的一些细节,并半自动处理低内存条件。
如果不调用initWithNibName
或手动设置视图属性,则视图属性为get,如果视图为nil,则调用loadView。 loadView的默认实现将查看你是否设置了nibBundle和nibName并尝试从那里加载视图(这就是为什么你不必在大多数情况下调用initWithNibName),但是如果没有设置这些属性,它将使用默认值实例化UIView对象。从技术上讲,是的,它会自动带有自己的UIView
,但大部分时间都没有什么价值。
现在进入TableView和UITableViewController类
TableViewController
是内置TableView的ViewController
。这将需要已声明和设置所需的委托方法。这个VC已经是一个TableView委托和数据源。它无法调整大小。上行是易用性,下行灵活性非常有限。
TableView
只是一个TableView(UIView
的子类)。它可以添加到ViewController并调整大小,与另一个基于视图的对象一起使用,等等。优点是灵活性,缺点是你必须自己设置委托和数据源方法(在我看来,非常值得花时间去获取)灵活性)。
另一个注意事项是,当使用新的Static TableView单元格(iOS5的一部分)时,您必须使用TableViewController。
另请查看以下链接以获取有关方法的详细说明。
答案 1 :(得分:1)
视图及其控制器之间的差异可以在Model-View-Controller pattern的上下文中正确设置(也可以查看this post):
视图是其模型的(可视)表示。它通常会突出模型的某些属性并压制其他属性。因此它充当演示过滤器。
视图附加到其模型(或模型部分),并通过提问来从模型中获取演示所需的数据。它还可以通过发送适当的消息来更新模型。所有这些问题和消息都必须在模型的术语中,因此视图必须知道它所代表的模型属性的语义。
控制器是用户和系统之间的链接。它通过安排相关视图向用户提供输入,以在屏幕上的适当位置呈现自己。它通过向用户呈现菜单或其他给出命令和数据的方式来提供用户输出的手段。控制器接收此类用户输出,将其转换为相应的消息,并将这些消息传递给一个或多个视图。
这个想法是视图负责模型中包含的数据的可视化表示;粗略地说,控制器负责视图和模型之间的用户交互和通信。
这适用于UIView
和UIViewController
之间的关系,以及UITableView
和UITableViewController
之间的关系等。另请注意,虽然{{ 1}} / UIView
没有为模型类提供(因为它们是非常宽泛的类,所以模型可以是任何东西),UIViewController
/ UITableView
确定表单中的模型表数据源及其UITableViewController
。
答案 2 :(得分:0)
视图控制器顾名思义是一个控制其管理的“视图”的实体。因此,您不会将视图控制器渲染到屏幕上。你只是渲染视图。视图可以呈现在屏幕上。它可以接受触摸事件,手势等。它可以包含许多其他子视图,也可以是另一个视图的子视图。但是把这整张照片看完。什么管理所有这些视图(和子视图)与他们的机制?那是视图控制器。视图控制器是一个包含视图组合的对象,它管理这些视图的工作方式。