2016-12-16 39 views
0

将表视图添加到视图控制器后,我控制拖动两次从电视到界面生成器中的VC以指定VC是数据源和委托的表视图。为什么有必要声明数据源/委托两次

在View Controller中,我必须在类定义或View Controller扩展中指定相同的值。

这是为什么?这不是多余的吗?

谢谢。

回答

5

根本不是。你在做什么是两件不同的事情。

extension中,您告诉编译器“此类符合UITableViewDatasourceUITableViewDelegate协议,因此可用于UITableView”。

在界面生成器中,您正在告诉UITableView“这里的这个类是我希望你用作你的datasourcedelegate”。

0

这当然不是多余的。

正如你可以从名字的区别中看出的,“委托”和“数据源”是不同的东西。

数据源回答关于表视图显示的数据的问题。例如,每个部分有多少行?那里有几个部分?表格视图单元格有多长?什么是每个部分的页眉视图和页脚视图?

另一方面,委托人回答关于表视图行为的问题。例如,当用户选择一个单元时应该做什么?当用户取消选择一个单元时应该做什么?用户结束编辑时应该做什么?

由于数据源和委托的功能非常不同,一个类可能只是数据源而不是委托,反之亦然。这就是为什么你拖两次,一次说VC是数据源,一次说VC是代表。

但是,不仅仅是任何VC可以成为数据源和代表。你必须告诉编译器你的VC有能力成为一个数据源和一个委托。这就是为什么你写的:如果你能

class MyVC: UITableViewDelegate, UITableViewDataSource {} 

如果你认为这是二麻烦,使用UITableViewController