从collectionView swift中删除数组中的项

时间:2017-07-02 16:08:58

标签: ios swift uicollectionview

我有这个集合视图,数组显示为菜单:(我一直在搜索所有Stack Overflow,但没有一个答案适合我)

 //what cell to be displyed when and if
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = optionsCollectionView.dequeueReusableCell(withReuseIdentifier: cellID, for: indexPath) as! OptionsCell

    let optionsForCell = self.options[indexPath.item]
    cell.option = optionsForCell

    if Auth.auth().currentUser?.uid != cellUserIDa {


        if optionsForCell.optionName == "Edit Comment" {
            cell.isHidden = true
            options.remove(at: 0)
            print(optionsForCell)
        } else if optionsForCell.optionName == "Delete Comment" {
            cell.isHidden = true
            print(optionsForCell)
        }
    }

阵列:

var options : [Options] = {
        return [Options(optionName: "Edit Comment", optionImage: "edit2"),
                Options(optionName: "Delete Comment", optionImage: "trash"),
                Options(optionName: "Flag as Inappropriate", optionImage: "view"),
                Options(optionName: "Cancel", optionImage: "cancel")]
    }()

如何从collectionView中删除此数组中的一个项目?我主动想删除单元格,所以如果有更好的方法可以做到吗?

3 个答案:

答案 0 :(得分:0)

因此,正如所讨论的,您有两种情况 1)访客菜单 2)用户菜单

由于数据是静态的而不是动态的并且保持简单。让我们分别命名两个数组: -

var visitors =["Daily", "Monthly", "Yearly"]

var users = ["Daily", "Monthly", "Quarterly", "Yearly"]

从您的代码我可以看出,您正在通过身份验证来检查此人是否真的是用户或访问者,在填充集合视图单元格时使用相同的逻辑。这将使您免于从数组中删除和添加两种不同类型的人的麻烦。

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

let cell = optionsCollectionView.dequeueReusableCell(withReuseIdentifier: cellID, for: indexPath) as! OptionsCell

if Auth.auth().currentUser?.uid != cellUserIDa {

// visitor, do the visitor stuff 
cell.optionLabel.text = visitors[indexPath.row]
}
else {
// user, do the usr stuff

cell.optionLabel.text = users[indexPath.row]
}

}

对于collectionView的其他两个委托函数也是如此。如果此人未经过身份验证,则返回访问者的计数,否则返回用户的计数。通过不删除和隐藏不需要的单元格,这将为您节省大量时间。

答案 1 :(得分:0)

您可以通过提供要删除的项目的索引来删除数组中的项目,例如。 animals.remove(at:2) 当项目被删除时,只需重新加载collectionView 例如collectionView.reload()

由于

答案 2 :(得分:0)

根据您的要求,这是最好的示例代码。首先,您需要根据用户设置选项,演示为您提供更清晰的想法。

https://www.dropbox.com/s/xh4pxtghy8696nj/DemoCollectionView.zip?dl=0