我正在深入研究iPhone开发,我试图了解其中一个核心概念是视图控制器。如果你查看apple dev网站上的GLPaint示例,你会看到一个项目......
uiview子类实现了所有核心图形绘制逻辑并处理触摸事件。我的问题是......
非常感谢您的帮助!
答案 0 :(得分:2)
视图知道如何与用户交互。它知道如何显示某些数据,如何处理事件以及如何向用户提供反馈。
视图控制器知道什么,但现在如何。它知道要显示的数据以及响应用户操作的操作。
UIButton知道如何显示标题和图片,以及如何跟踪点击,但不知道标题应该是什么或点击后该做什么。
UITableView知道如何在单元格中显示数据以及如何处理编辑,但它不知道删除单元格时要显示的数据或要执行的操作。为此,它使用委托和数据源,它通常是一个视图控制器。
简化设计和维护之间的划分。您可以为每种类型的表逻辑创建tableview的子类,但是您也不能控制其他视图。视图控制器可以控制多个视图并在它们之间进行协调。
编辑:
因此,您应该在需要时使用视图控制器:
请注意,视图控制器不是严格意义上的UIViewController。您可能拥有一个由UIViewController拥有的视图控制器并处理一些视图,但它是从NSObject或其他任何视图派生的。视图控制器管理以UIViewController为根的视图层次结构的某些部分,并由该UIViewController拥有。 UIViewController又可以是以应用程序委托为根的层次结构的一部分,并且可能由导航,选项卡或其他元控制器拥有。
因此,应用程序委托拥有零个或多个元控制器,如UINavigationController。每个元控制器都拥有一个或多个UIViewControllers。其中每个都拥有一个视图层次结构,可能拥有几个简单的视图控制器,可帮助管理视图层次结构的各个部分。如果不需要元控制器,则应用程序委托可以拥有或成为UIViewController。
答案 1 :(得分:1)
如果您需要在视图控制器中找不到视图中的功能(反之亦然),您将知道要使用哪些功能。对于您的问题2,例如,drawRect
回调可在UIView
中使用,但不能在UIViewController
中使用。
到目前为止,只要涉及UIViewController
,我就会使用.xib
。
我喜欢在NSTimer
viewWillAppear
viewDidAppear
和viewWillDisapper
方法中进行初始化和清理代码(例如viewDidAppear
)。当处理许多模态弹出窗口和多个视图控制器时,它在单个入口/出口点的团队中特别方便。
答案 2 :(得分:0)
视图控制器主要适用于应用程序的全屏部分,您可以在界面构建器中进行布局。每个视图控制器都有一个view属性,指向UIView或其子类之一,但它们管理的不止于此。 View控制器总是全屏,所以它可以实现像shouldRotateToInterfaceOrientation这样的东西:虽然屏幕上可能有5个UIViews,但只能有一个视图控制器。
它也是MVC(模型 - 视图 - 控制器)的重要组成部分。
视图控制器连接视图和模型。理论上,该模型应该做数学的东西,并存储数据,以及其他非UI的东西。视图应该绘制和管理。它不应该存储内容,它不应该做任何其他事情,真的。视图控制器将两者连接在一起。它可以从模型中查找数据,并将其提供给视图。这样,代码更少的是特定于应用程序的。您可以重用模型和视图,但大多数情况下,如果不进行修改就很难重用控制器。
我不是专家,所以为了澄清,请发表评论。