在Swift中符合UITableViewDelegate和UITableViewDatasource?

时间:2016-01-02 11:51:44

标签: ios swift uitableview

我正在学习swift 2.0,我想知道你是否还需要在Obj-C中添加代码tableView.datasource = selftableView.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 = selfviewDidLoad,则表格视图为空白。这是为什么?

这段代码是否仍然需要,因为我看到许多youtube教程不再包含在swift中,而且我很困惑为什么没有它我的工作没有呢?

2 个答案:

答案 0 :(得分:4)

首先,这完全独立于哪种语言 你使用,Swift或Objective-C。

但是有两种不同的情况可能导致混淆:

UITableViewController子类:

UITableViewController已符合UITableViewDataSourceUITableViewDelegate。它有tableView属性, 其dataSourcedelegate属性已设置为self

在您的子类中,您通常覆盖 数据源和委托方法。

具有UIViewController属性的UITableView子类:

您已在子类中定义了UITableView属性 并在您的代码中初始化它,或 将它连接到界面构建器中的表视图。

在这种情况下,您必须设置dataSourcedelegate tableview的属性,无论是在代码中还是在接口中 构建器,如luk2302's answer中所述。

如果数据源和委托是视图控制器本身, 那么你必须明确声明协议一致性, 和实现 数据源和委托方法(但没有覆盖 超类方法)。

当然,在这两种情况下,表视图数据源和委托 可以设置为不同的对象,但不一定如此 视图控制器本身。

答案 1 :(得分:3)

是的,仍需要部分分配 通过代码明确地显示

您可以做的是在接口构建器中已经连接它们,通过代码使显式赋值过时。这可能是很多教程所做的。

enter image description here