在Swift中符合UITableViewDelegate和UITableViewDatasource?
我正在学习Swift 2.0,我想知道如果你仍然需要添加代码tableView.datasource = self
和tableView.delegate = self
像Obj-C符合协议?
示例代码:
class AboutViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { override func viewDidLoad() { super.viewDidLoad() // conform to protocols aboutTableView.dataSource = self aboutTableView.delegate = self } func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return 2 } func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { return 50 } func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { // Code here } }
现在,表格视图会在每个单元格中加载正确的数据。
但是,如果我从viewDidLoad
删除aboutTableView.datasource = self
和aboutTableView.delegate = self
,我的表视图是空的。 为什么是这样?
这段代码仍然是必需的,因为我看到许多YouTube的教程,不再包括这个在迅速,而我很困惑,为什么我不工作没有它?
首先,这是完全独立于你使用哪种语言,Swift或Objective-C。
但有两种情况可能会造成混淆:
一个UITableViewController
子类:
UITableViewController
已经符合UITableViewDataSource
和UITableViewDelegate
。 它有一个tableView
属性,其dataSource
和delegate
属性已经设置为self
。
在你的子类中,你通常会覆盖数据源和委托方法。
具有UITableView
属性的UIViewController
子类:
这里你已经在你的子类中定义了一个UITableView
属性,并在你的代码中初始化它,或者把它连接到界面生成器中的一个表格视图。
在这种情况下,您必须设置tableview的dataSource
和delegate
属性,无论是在代码中还是在界面构build器中,如luk2302的答案中所述 。
如果数据源和委托是视图控制器本身,则必须显式声明协议一致性,并实现数据源和委托方法(但不覆盖超类方法)。
当然,在这两种情况下,表视图数据源和委托可以被设置为不同的对象,它不一定是视图控制器本身。
是的, 一些分配仍然是必需的。
要么明确地通过代码
要么
你可以做的是将它们连接到接口生成器中,通过代码进行明确的分配。 这可能是很多教程做的。