CollectionView 添加额外的单元格“添加更多”

Posted

技术标签:

【中文标题】CollectionView 添加额外的单元格“添加更多”【英文标题】:CollectionView Add extra cell "Add more" 【发布时间】:2016-03-15 21:27:49 【问题描述】:

在我的收藏视图中添加额外的单元格时遇到问题 我已更改逻辑以使用数据模型来填充我的单元格

 func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int 
        return pictures.count + 1
    


    func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell 

        let cell = collectionView.dequeueReusableCellWithReuseIdentifier("images", forIndexPath: indexPath) as! ProfileImageCell

        let picture = pictures[indexPath.item] as! Gallery

        print(indexPath.item)

        if indexPath.item == pictures.count 
            cell.image.image = UIImage(named: "ProfilePlusImage")
         else 
            cell.image.sd_setImageWithURL(NSURL(string: picture.fileUrl), placeholderImage: UIImage(named: "Placeholder"))
            cell.imageId = picture.id.integerValue
        

        return cell
    

我认为问题出在这一行

让图片=图片[indexPath.item]为!图库

当我标记它并标记时

cell.image.sd_setImageWithURL(NSURL(string: picture.fileUrl), placeholderImage: UIImage(named: "Placeholder"))

它在第 11 位添加了额外的单元格。但其他方式让我超越了界限

谁能帮帮我?

【问题讨论】:

是的,在将indexPath.item 用作pictures 的索引之前,您应该验证它是否小于pictures.count。你似乎有了答案。 @i_am_jorf no still index 10 beyond bounds [0 .. 9] 只需将该行移到else 语句中 @Paulw11 谢谢它的工作,我花了 2 个小时才明白什么坏了:) 【参考方案1】:
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell 

    let cell = collectionView.dequeueReusableCellWithReuseIdentifier("images", forIndexPath: indexPath) as! ProfileImageCell

    print(indexPath.item)

    if indexPath.item == pictures.count 
        cell.image.image = UIImage(named: "ProfilePlusImage")
     else 
        let picture = pictures[indexPath.item] as! Gallery

        cell.image.sd_setImageWithURL(NSURL(string: picture.fileUrl), placeholderImage: UIImage(named: "Placeholder"))
        cell.imageId = picture.id.integerValue
    

    return cell

【讨论】:

【参考方案2】:

您的 CollectionView 似乎只有一个部分,所以这段代码应该可以工作

func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int 
    return 2


func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int 
    if section == 0 
        return 1
    
    return pictures.count


func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell 

    let cell = collectionView.dequeueReusableCellWithReuseIdentifier("images", forIndexPath: indexPath) as! ProfileImageCell

    let picture = pictures[indexPath.item] as! Gallery

    print(indexPath.item)


    if indexPath.section == 0 
        cell.image.image = UIImage(named: "ProfilePlusImage")
     else 
        cell.image.sd_setImageWithURL(NSURL(string: picture.fileUrl), placeholderImage: UIImage(named: "Placeholder"))
        cell.imageId = picture.id.integerValue
    

    return cell

【讨论】:

此代码无法编译,因为print(indexPath.item) 之后的独立if 语句

以上是关于CollectionView 添加额外的单元格“添加更多”的主要内容,如果未能解决你的问题,请参考以下文章

多行 UILabel 导致额外的填充

如何在 collectionView 单元格中添加可滚动视图

如何在 CollectionView 单元格上添加过渡动画?

如何将操作按钮添加到 collectionView 的部分单元格中?

如何在collectionView自定义布局中的其他补充标题单元格上方添加标题补充单元格

在 CollectionView 中添加第二个自定义单元格 - Swift