UICollection手动加载更多单元格Swift

时间:2017-04-16 23:32:09

标签: ios swift swift3 uicollectionview

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

screen

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

我的按钮和他的功能


    lazy var showMoreButton: UIButton = {
            let button = UIButton(type: .system)
            button.setTitle("Show me more", for: .normal)
            button.addTarget(self, action: #selector(handleShowMore), for: .touchUpInside)
            return button
        }()

    func handleShowMore(){

            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
        }
    }


}

`

1 个答案:

答案 0 :(得分:1)

这一行

HomeDatasourceController().collectionView?.reloadData()  

似乎是原因。因为您正在创建一个新的HomeDatasourceController&#39;虽然在重装时它应该已经存在。因此,您应该重用已经存在的&#39; HomeDatasourceController&#39;。

的实例

你创建了一个实例,例如

let datasourceController = HomeDatasourceController()

现在在

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