cocoa-touch – 应该在UIView中查看逻辑还是(如适用)其UIViewController?

我最近发现UIViews在填充整个窗口时应该只有UIViewControllers(或者由另一个UIViewController管理,例如UINavigationController或UISplitViewController).此报价来自UIViewController的文档:

You should not use view controllers to manage views that fill only a part of their window—that is, only part of the area defined by the application content rectangle. If you want to have an interface composed of several smaller views, embed them all in a single root view and manage that view with your view controller.

我通常将我的视图逻辑放在UIView中,即使它是由UIViewController管理的,但我经常发现自己需要访问UIViewController的属性,例如它的navigationController属性.但是,UIViews不应该知道他们的UIViewController.

我的结论是视图逻辑应该存在于UIView的UIViewController中,否则存在于UIView本身.

或者,更好的做法是为视图创建一个控制器类,而该视图不是UIViewController的子类? UIPopoverController(一个NSObject子类)似乎遵循这种模式,尽管在大多数情况下(UIButton等)视图似乎没有专用的控制器类.

最佳答案
应用程序逻辑永远不应该进入UIView.期. UIViewController的目的是管理视图及其子视图,在大多数情况下,它是逻辑的适当位置. UIKit遵循模型 – 视图 – 控制器范例.模型保存数据,视图显示数据并接受输入,控制器管理其他两个层之间的交互.这就是控制器是应用逻辑的逻辑位置的原因.在iOS中,UIViewController及其子类是通常的控制器类.我建议reading up on Apple’s guidance更好地理解这个模式以及它在iOS中的使用方式.

Apple文档中的引用告诉您不要为每个标签或按钮创建UIViewController.您为应用程序的每个“页面”或“屏幕”创建一个,并使用它来管理该视图中的控件.请注意,UIKit具有管理表视图,选项卡视图和导航视图的类.这是您使用UIViewController管理的对象级别.

我建议浏览SDK附带的iOS示例.它们应该让您很好地了解框架如何构建应用程序.

转载注明原文:cocoa-touch – 应该在UIView中查看逻辑还是(如适用)其UIViewController? - 代码日志