【问题标题】:Reload data not working in HeaderView in Swift在 Swift 的 HeaderView 中重新加载数据不起作用
【发布时间】:2020-01-15 22:02:17
【问题描述】:

我无法更新CollectionView 的标题视图的数据。此标题视图是UICollectionReusableView 的子类。

我试图调用一种方法在不同的地方重新加载这些数据,但它们都没有触发更新。要查看更新的数据,我必须关闭并再次打开应用程序。

集合视图:

    func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {

        guard kind == UICollectionView.elementKindSectionHeader else {
            fatalError("Unexpected element kind.")
        }

        let headerView = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: "ProfileHeaderView", for: indexPath) as! ProfileHeaderView

         header?.reloadData()
//        headerView.userNameLabel.text = defaults.string(forKey: "username")

        return headerView
    }

标题视图:

class ProfileHeaderView: UICollectionReusableView {

    @IBOutlet weak var userNameLabel: UILabel!

    func reloadData() {

        let defaults = UserDefaults.standard
        usernameTextLabel.text = defaults.string(forKey: "username")

    }

我还尝试在ViewWillAppearViewDidAppear 上致电reloadData()

【问题讨论】:

    标签: ios swift uicollectionview reload uicollectionreusableview


    【解决方案1】:

    你可以尝试获取header,例如:

    func reloadHeaderData() {
        guard let header = collectionView.supplementaryView(forElementKind: UICollectionView.elementKindSectionHeader, at: YourIndexPath) as? ProfileHeaderView else { return }
        header.reloadData()
    }
    

    【讨论】:

    • 我应该在哪里称呼这个?
    • 这取决于您的项目结构,但您可以在需要刷新标题数据时调用它。
    • 我不知道把它放在哪里让它工作。我收到很多错误。我应该把什么作为索引路径?它不接受整数。这和我已经用 header.reloadData 做的不一样吗?
    • 嗯,根据我对您的第一个问题的理解,您无法刷新标题数据,但是现在,阅读您的 cmets,我认为这与您第一次加载集合视图,但是,在这种情况下,你在 UICollectionViewDataSource 函数中做什么就足够了。让我们继续聊天:chat.stackexchange.com/rooms/98713/…
    猜你喜欢
    • 2018-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多