我正在学习swift 2.0,我想知道你是否还需要在Obj-C中添加代码tableView.datasource = self
和tableView.delegate = self
以符合协议?
示例代码:
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
}
}
现在,表视图会在每个单元格中加载正确的数据。
但是,如果我从aboutTableView.datasource = self
删除aboutTableView.delegate = self
和viewDidLoad
,则表格视图为空白。这是为什么?
这段代码是否仍然需要,因为我看到许多youtube教程不再包含在swift中,而且我很困惑为什么没有它我的工作没有呢?
答案 0 :(得分:4)
首先,这完全独立于哪种语言 你使用,Swift或Objective-C。
但是有两种不同的情况可能导致混淆:
UITableViewController
子类:
UITableViewController
已符合UITableViewDataSource
和UITableViewDelegate
。它有tableView
属性,
其dataSource
和delegate
属性已设置为self
。
在您的子类中,您通常覆盖 数据源和委托方法。
具有UIViewController
属性的UITableView
子类:
您已在子类中定义了UITableView
属性
并在您的代码中初始化它,或
将它连接到界面构建器中的表视图。
在这种情况下,您必须设置dataSource
和delegate
tableview的属性,无论是在代码中还是在接口中
构建器,如luk2302's answer中所述。
如果数据源和委托是视图控制器本身, 那么你必须明确声明协议一致性, 和实现 数据源和委托方法(但没有覆盖 超类方法)。
当然,在这两种情况下,表视图数据源和委托 可以设置为不同的对象,但不一定如此 视图控制器本身。
答案 1 :(得分:3)