繁体   English   中英

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

[英]When do you need to use a view controller?

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

  1. 一个app委托类
  2. 一个uiwindow子类
  3. 还有一个uiview子类

uiview子类实现了所有核心图形绘制逻辑并处理触摸事件。 我的问题是......

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

非常感谢您的帮助!

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

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

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

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

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

编辑:

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

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

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

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

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM