最佳实践:UIViewController或UIView

Sac*_*hin 4 iphone objective-c uiviewcontroller uiview ios

我将在IOS中设计一个组件,其中我们将有Table视图和Grid View; 意味着用户可以在表格或网格中查看他的数据.所以我正在做的是我添加了一个UIViewController,并为表添加了两个子视图控制器,另一个用于集合视图.我只使用UIViewController处理所有事情.它意味着当用户想要使用我的组件时,他必须仅添加为子视图控制器.我的问题是"这是使用UIViewController的最佳实践,就像我正在做的那样,或者我应该将所有内容转换为UIView,因为UIView很轻." 我将在我的组件中只编写表示逻辑.我们将使用委托从外部获取数据.如果我应该使用UIView那么我何时应该使用UIViewController?

谢谢

occ*_*lus 6

您当前的方法是正确的.

UIViews应该只做一件事:在被要求时画一个视图.

UIViewControllers更复杂.他们负责使用他们完成工作所需的任何数据来设置视图,在需要时合成多个视图(或视图控制器),响应来自视图组件或一般设备的事件,以及与其余部分进行通信.代码/系统.

因为您的代码想要显示两种不同类型的信息,所以它比UIViewController更适合UIViewController.

正如您所指出的,Apple本身有许多UIView子类的例子,它们有委托并做复杂的事情.但是,如果您正在编写一个新组件并且它很复杂(就像您的那样),我认真地建议您使用UIViewController方法.

关于历史的说明: Apple过去常常建议UIViewControllers只显示/合成UIViews而不是其他UIViewControllers(尽管令人困惑的是,他们并不总是遵循自己的建议!).这将与他们制作一些非常复杂的UIView子类相一致.但是,他们在一段时间后改变了这种立场,并添加了对UIViewControllers的支持,以便合成其他UIViewControllers的视图.如果Apple的立场一直像现在一样,你可能会发现他们的一些UIView子类是作为UIViewControllers实现的!

作为一项实验,尝试以两种方式实现组件可能会非常有教育意义.我预测你会发现UIView的方法更加笨拙,你已经手动重新检测了一些你用UIViewController方法免费获得的'布线'.