UICollectionView:更新Section FooterTitles

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UICollectionView:更新Section FooterTitles相关的知识,希望对你有一定的参考价值。

我使用UICollectionView作为Messenger UI。部分页脚显示发送消息的时间。但是,我只想在超过15分钟前发送上一条消息时显示它。

因此,我希望每次发送邮件时刷新页脚。但是,如何刷新章节页脚标题?

我尝试了self.collectionView.reloadData(),但它没有更新页脚(将它们设置为“”)。 (当我向上和向下滚动时,它们会消失,因此逻辑有效。)

你知道怎么刷新页脚标题吗?

答案

假设您正在设置这样的collectionView

enter image description here

您正在使用默认流布局。所以你可以为页眉和页脚添加标签。在页脚标签中,将其标记设置为1001(或您喜欢的任何数字)。

标题的标识符是“标题”,页脚是“页脚”。 UICollectionElementKindSectionHeader在流布局类中定义(检查文档。)

enter image description here

现在你可以像这样重新加载页眉和页脚:

override  func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView{
let cell = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: (kind == UICollectionElementKindSectionHeader ?  "header": "footer"), for: indexPath)
// Configure the cell
return cell
}

当您尝试更改页脚中的标签内容时,您不需要刷新页脚。您可以在应用程序的任何位置调用以下内容。为方便起见,我将其称为单元格以运行测试。

 override func collectionView(_ collectionView: UICollectionView, shouldSelectItemAt indexPath: IndexPath) -> Bool {
let footView =   collectionView.supplementaryView(forElementKind: UICollectionElementKindSectionFooter, at: IndexPath.init(row: 0, section: 1))
    if let label =  footView?.viewWithTag(1001) as? UILabel{
    label.text = "AnyThing"
    }

这里我使用的是IndexPath.init(row:0,section:1),这是第二部分。现在你看到了结果。

enter image description here

这是一个最简单的例子。 CollectionView可能非常复杂,值得一本书用于各种应用程序和示例。希望这可以帮到你。

以上是关于UICollectionView:更新Section FooterTitles的主要内容,如果未能解决你的问题,请参考以下文章

更新UICollectionView中的标签

tvOS 11 更新 UICollectionView 崩溃

更新 UICollectionView 中不可见的单元格

UICollectionView 重新加载数据不会更新单元格

更新嵌套的 UICollectionView - Swift 3

框架没有正确更新 UICollectionView 作为 UITableViewCell 子视图