为什么有的ViewController需要最后继承UIViewDataSource&UIViewDelegate?

这个里面需要实现大量的同名重载函数。
这种多出现与viewController中。下面以UITableView为例来讲一下:

UITableView的数据源(dataSource)和代理(delegate)

UITableView需要一个数据源(dataSource)来显示数据,UITableView会向数据源查询一共有多少行数据以及每一行显示什么数据等。没有设置数据源的UITableView只是个空壳。凡是遵守UITableViewDataSource协议的OC对象,都可以是UITableView的数据源。

通常都要为UITableView设置代理对象(delegate),以便在UITableView触发一下事件时做出相应的处理,比如选中了某一行。凡是遵守了UITableViewDelegate协议的OC对象,都可以是UITableView的代理对象。一般会让控制器充当UITableView的dataSource和delegate。

同样UITableViewCell:
UITableView的每一行都是一个UITableViewCell,通过dataSource的tableView:cellForRowAtIndexPath:方法来初始化每一行。还可以通过DidSelectRowAt等方法来实现其他功能。UITableViewCell是UIView的子类。

总结一下:
UITableViewController是UIViewCOntroller的子类。而UITableViewCOntroller默认扮演了三种角色:视图控制器、UITableView的数据源和代理。UITableViewController的view是个UITablView,由UITableViewController负责设置和显示这个对象。UITableViewController对象被创建后,会将这个UITableView对象的dataSource和delegate指向UITableViewController自己。

refer:https://www.jianshu.com/p/e759d23700bd

posted @ 2020-07-20 04:14  EvanMeetTheWorld  阅读(18)  评论(0)    收藏  举报