为 UITableView 设置数据源和委托的最佳实践

Posted

技术标签:

【中文标题】为 UITableView 设置数据源和委托的最佳实践【英文标题】:Best practice for setting a data source and delegate for a UITableView 【发布时间】:2014-01-04 13:56:59 【问题描述】:

这个问题可能没有一个直接的答案,但我很好奇其他人的想法。我有一个 UIViewController,里面有 2 个对象,一个 UIView 和一个 UITableView。每个对象都是它自己的自定义类。我的问题是关于 UITableView,什么对象应该是数据源和委托。现在我将 UIViewController 设置为这些卷,但是将对象本身设置为数据源和委托是否会受到困扰,也许使用方法 awakeFromNib 来设置这两个源。两种方式都可以吗?我认为将数据和委托设置为代表 tableview 的类将使该代码与视图控制器分开,我认为这将是一件好事……但也许不是……

【问题讨论】:

【参考方案1】:

其实是个好问题。

将控制器视为四人组中的中介者模式的一个例子:它调解了视图和模型之间的关系。大多数网络世界已经使用某种类型的绑定,因此您通常会看到模型对象直接“绑定”到视图层,例如文本编辑字段可能有一个表达式,指示它正在编辑域对象中的哪个字段,然后框架将提供封送和解封该数据的服务。

在 Cocoa 中,您通常不会这样做:您绑定到 Controller 中的属性,然后这些属性通常用于转换底层域类。例如,如果您制作故事板并制作表单并拥有自定义控制器,那么现在您想要编辑某个实体的名称,例如用户,您可以按住 CTRL 键从编辑框拖动到源,它会创建一个插座,然后您不仅可以控制该框中显示的内容,还可以控制控件本身。然后,您可以添加一个提交按钮并按住 CTRL 并拖动来创建一个方法,用于保存,当单击该方法时,您可以更新底层的 User 实例。

【讨论】:

谢谢 Rob,如果我理解正确的话。 UIViewController 应该有一个到表视图的出口,它不仅可以是委托和数据源,还可以控制关​​于 UITableView 的所有内容,例如x,y 位置、动画(如果有)以及类似的东西? 在 Cocoa 中有两种方法来做表:你可以从 UITableViewController 派生你的控制器(如果这是视图正在做的主要事情),或者你可以让另一个更通用的控制器成为实现各种协议。两者都有很多例子。

以上是关于为 UITableView 设置数据源和委托的最佳实践的主要内容,如果未能解决你的问题,请参考以下文章

从 prepareForSegue:sender 设置 UITableView 委托和数据源时出错:

设置数据源和委托使 UITableView 的应用程序崩溃

将委托设置为对象

未调用 UICollectionView 内部 UITableView 的委托方法

设置UITableView数据源并在单独的文件中委托 - swift

即使我设置了它的委托、数据源并注册了可重用单元格,UITableView 也没有被调用