在Swift 3.0和Xcode 8迁移后未调用UITableViewDelegate方法

时间:2016-10-16 11:54:18

标签: ios swift uitableview swift3

将我的代码库从Swift 2.2迁移到Swift 3.0之后,我注意到我的UITableView页脚没有出现。事实证明,我的UITableViewDelegate方法都没有被调用(例如:func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView?)。

有趣的是,正在调用UITableViewDataSource方法并填充。我已将父视图控制器设置为表delegatedataSource

为了说明问题,我创建了一个sample Swift 3.0 project,以便尽可能地匹配我现有的代码库。可能在Swift 3 / Xcode 8中发生了一些我不知道的事情,或者我可能会遗漏一些非常明显的东西。谢谢你的帮助!

3 个答案:

答案 0 :(得分:5)

检查完样本项目后:

你没有做错任何事,但提到viewForFooterInSection,在你实施heightForFooterInSection方法之前不会被调用:

func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
    return 50 // for example
}

类似案例:

heightForHeaderInSection没有实施==>即使已实施viewForHeaderInSection,也无需致电{。}}。

numberOfRowsInSection作为零返回==>即使已实施cellForRowAt,也无需致电{。}}。

附加说明:您不必在tableView.dataSource = self中添加tableView.delegate = selfviewDidLoad(),它们已在界面生成器中设置。< / p>

答案 1 :(得分:3)

您应该设置页脚的高度

 func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
    return 15
}

答案 2 :(得分:1)

在Xcode8或最新的Swift版本中,方法签名已更改。此更改可能导致您的代码无法调用委托方法。

使用自动完成功能再次编写方法修复它。

旧方法 -

func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat? {
    return 50.0
}

新方法 -

func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    return 50.0
}
使用 viewForHeaderInSection 时,必须使用

heightForHeaderInSection

希望这会有所帮助。