例如:UITableviewDelegate
协议有tableView:didSelectRowAtIndexPath:
. 为什么让它成为协议中的委托方法而不是UITableView
类中的方法并直接调用它?
2 回答
实际上,在UITableViewDataSource
非委托中这是一个重要的区别。
委托的目的是将某些事情的责任转移给客户端代码。它UITableView
本身不知道它需要创建什么类型的单元格。您的应用程序是一个知道细胞应该是什么样子以及它们如何工作的应用程序。这就是为什么tableView
要求数据源(由协议定义)来创建单元格。
在 Apple 框架中,adelegate
通常用于监听对象事件,而 adataSource
用于为某事提供内容。两者都是委托模式的形式。
如果你问是因为你想问一个表格视图 - “那个索引路径上的单元格是什么?” 你可以使用实例方法cellForRowAtIndexPath
因为您可能希望将不同的类作为UITableViewController
.
这是一个简单且有些人为的示例来说明...
想象一下,您有一个视图控制器,其中有两个表视图,显示 DataA 和 DataB,您可以按每个表旁边的按钮转到该表全屏的另一个视图。您可以将其设置为具有两个UITableView
s 和两个s 的视图控制器以及作为子类UIButton
的第二个控制器,然后您将拥有两个完全独立的对象,一个是 DataA 表的数据源,一个是 DataA 表的数据源数据 B 表。因此,这些对象在第一个视图中为两个表提供了单元格,并且它们还在全屏控制器中提供了单元格 - 您可以根据它正在查看的表传递正确的数据源。MyFullScreenTableViewController
UITableViewController