tit*_*coy 7 model-view-controller cocoa-touch design-patterns uiviewcontroller ios
我最近发现UIViews应该只有UIViewController当它们填满整个窗口时(或由另一个UIViewController如a UINavigationController或管理UISplitViewController).此引用来自UIViewController的文档:
您不应该使用视图控制器来管理仅填充其窗口一部分的视图 - 即,只是应用程序内容矩形定义的区域的一部分.如果您希望有一个由几个较小视图组成的界面,请将它们全部嵌入到单个根视图中,并使用视图控制器管理该视图.
我通常将我的视图逻辑放在UIView中,即使它是由UIViewController管理的,但我经常发现自己需要访问UIViewController的属性,例如它的navigationController属性.但是,UIViews不应该知道他们的UIViewController.
我的结论是视图逻辑应该存在于UIView的UIViewController中,否则存在于UIView本身.
或者,更好的做法是为视图创建一个控制器类,而该视图不是 UIViewController的子类?UIPopoverController(一个NSObject子类)似乎遵循这种模式,尽管在大多数情况下(UIButton等)视图似乎没有专用的控制器类.
应用程序逻辑永远不应该放在UIView. 时期。a 的目的UIViewController是管理视图及其子视图,并且在大多数情况下,是逻辑的适当位置。UIKit 遵循模型-视图-控制器范式。模型保存数据,视图显示数据并接受输入,控制器管理其他两层之间的交互。这就是为什么控制器是应用程序逻辑的逻辑位置。在 iOS 中,UIViewController它的子类是通常的控制器类。我建议阅读 Apple 的指南,以更好地理解这种模式以及它在 iOS 中的使用方式。
Apple 文档中的引用告诉您不要UIViewController为每个标签或按钮创建一个。您为应用程序的每个“页面”或“屏幕”创建一个,并使用它来管理该视图中的控件。请注意,UIKit 具有管理表格视图、选项卡视图和导航视图的类。这是您将用于UIViewController管理的对象级别。
我建议浏览 SDK 中包含的 iOS 示例。它们应该让您对框架期望应用程序的结构有一个很好的了解。