【问题标题】:UICollection load more cell manually SwiftUICollection 手动加载更多单元格 Swift
【发布时间】:2017-09-12 14:03:59
【问题描述】:

我制作了一个 UICollection,它只包含 2 个单元格,并且带有一个包含“显示更多”按钮的页脚。当我们点击“Show me more”按钮时,它应该在 UICollection 中再添加 2 个单元格。

我的问题是当我单击按钮时 UICollection 不会重新加载并附加 2 个新单元格。我检查了关于无限滚动的不同帖子,但我无法解决我的问题。这是我的代码:

我的按钮和他的功能

懒惰的 var showMoreButton: UIButton = { 让按钮= UIButton(类型:.system) button.setTitle("Show me more", for: .normal) button.addTarget(self, action: #selector(handleShowMore), for: .touchUpInside) 返回按钮 }() 函数句柄显示更多(){ homeDatasource?.incrementNumberOfUser() HomeDatasourceController().collectionView?.reloadData() }

我的收藏 `

var numberOfUser: Int = 2

class HomeDatasource: Datasource, JSONDecodable { 

    override func footerClasses() -> [DatasourceCell.Type]? {
        return [UserFooter.self]
    }


    override func cellClasses() -> [DatasourceCell.Type] {
        return [UserCell.self, TweetCell.self] //UserCell -> section 0 and TweetCell -> section 1
    }

    override func item(_ indexPath: IndexPath) -> Any? {
        if indexPath.section == 1 {
            return tweets[indexPath.item]
        }
        return users[indexPath.item]
    }  

    override func numberOfItems(_ section: Int) -> Int {
        if section == 1 {
            return tweets.count
        }
        return numberOfUser //users.count
    }

    override func numberOfSections() -> Int {
        return 2
    }

    func incrementNumberOfUser() {

        if numberOfUser <= users.count {
            numberOfUser = numberOfUser + 2
        }
    }


}

`

【问题讨论】:

  • 你确定所有的方法都被正确调用了吗?是否调用了按钮单击方法“handleShowMore”?用户数量真的增加了吗?重新加载后调试时“numberOfItems”是否真的返回 4 而不是 2?为什么属性“numberOfUser”不是您的“HomeDatasource”类的一部分?
  • 您是否还确定这些行中的选项不是 nil 'homeDatasource?.incrementNumberOfUser() HomeDatasourceController().collectionView?.reloadData()'?
  • 是的,方法handleShowMore被调用,numberOfUser递增。但是单元格没有更新。也许我需要在重新加载数据之前清除数据源。
  • 所以第一次构建collectionview时,方法'numberOfItems'返回2,第二次按下按钮后,再次调用方法'numberOfItems'并返回4。这是正确的吗?
  • 您能否发布“UICollectionViewDataSource”委托方法的实现?

标签: ios swift swift3 uicollectionview


【解决方案1】:

这一行

HomeDatasourceController().collectionView?.reloadData()  

似乎是原因。因为您正在创建一个新的“HomeDatasourceController”,尽管在重新加载时它应该已经存在。所以你应该重用已经存在的“HomeDatasourceController”实例。

您在某处创建了实例,例如

let datasourceController = HomeDatasourceController()

现在在

中重用该实例
func handleShowMore() {
    homeDatasource?.incrementNumberOfUser()
    datasourceController.collectionView?.reloadData()  
} 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多