最佳实践:UIViewController或UIView

时间:2013-10-25 07:09:59

标签: ios iphone objective-c uiview uiviewcontroller

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

由于

3 个答案:

答案 0 :(得分:5)

您目前的做法是正确的。

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

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

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

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

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

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

答案 1 :(得分:1)

避免将逻辑放在UIView子类中。

答案 2 :(得分:0)

我认为你可以使用表格视图制作网格视图,只需在每个单元格上添加多个视图

在将网格切换到列表或列表到网格时,只需检查您的类型并重新加载tableview