为啥 viewDidLoad() 中不存在 TableView 的 FooterView 以及如何解决?

Posted

技术标签:

【中文标题】为啥 viewDidLoad() 中不存在 TableView 的 FooterView 以及如何解决?【英文标题】:Why TableView's FooterView doesn't exist in viewDidLoad() and how to fix it?为什么 viewDidLoad() 中不存在 TableView 的 FooterView 以及如何解决? 【发布时间】:2018-09-06 18:30:27 【问题描述】:

我有tableView,在情节提要中设置了一个部分和页脚。我正在尝试使用以下代码在viewDidLoad() 中更改我表格的footerView 中的文本

tableView.footerView(forSection: 0)?.textLabel?.text = "Testing text"

但是tableView.footerView(forSection: 0) == nil

然后在用户点击一个按钮时,我调用了一个函数,该函数使用相同的代码更改 footerView 的文本,并且效果很好。

func changeFooterText() 
    tableView.footerView(forSection: 0)?.textLabel?.text = "Testing text after tap"

为什么footerView 不存在于viewDidLoad 中,如何更改viewDidLoad 中的文本?还是我应该在其他地方更改它?加载屏幕后,我需要在页脚中添加取决于屏幕上其他数据的文本。

期待阅读您的建议。

【问题讨论】:

【参考方案1】:

您可以使用表格页脚查看方法:

override func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? 

【讨论】:

非常感谢! 但是如果我这样做 - 我会注意自己添加页脚标签的样式,对吗?没有默认样式?我的函数中的tableView.footerView(forSection: 0) 也变成了== nil【参考方案2】:

“viewDidLoad”在视图生命周期中过早。 UITableView 还没有构建它的组件。

可能可以将代码移至“viewDidAppear”,但最好像构建其他单元格一样构建页脚和页眉。 dequeueReusableHeaderFooterViewWithIdentifier 委托方法就是为了这个。

【讨论】:

谢谢!为什么认为这种方式比tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? 更好? 两者都可以。使用 viewForFooterInSection,您可以提供一个 UIView 显示在页脚区域。 dequeueReusableHeaderFooterViewWithIdentifier 交互有点像 UITableViewCells 本身,我觉得更好一点。如果你有很多部分,你会从 dequeue 中获得一些对象重用...... 你能给出一个代码示例吗?这对我很有帮助,我是 ios 开发的新手。

以上是关于为啥 viewDidLoad() 中不存在 TableView 的 FooterView 以及如何解决?的主要内容,如果未能解决你的问题,请参考以下文章

为啥水平滚动视图内容之间存在差距?

为啥 Qt creator 中不存在所有 android 权限?

为啥我会收到此错误错误状态:使用 Firestore 时 DocumentSnapshotPlatform 中不存在字段?

为啥 Django 关系字段中不存在“on_update”选项?

为啥webpack编译成功但是编译输出中不存在我的源代码?

为啥即使数据库中不存在 id 和/或用户名我也会成功