Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在UICollectionView中滚动和选择时的奇怪行为_Ios_Swift - Fatal编程技术网

Ios 在UICollectionView中滚动和选择时的奇怪行为

Ios 在UICollectionView中滚动和选择时的奇怪行为,ios,swift,Ios,Swift,我在UICollectionView中的自定义单元格上显示复选标记时遇到问题。在最初的几次点击中,一切正常,但当我开始滚动、反复点击或单击已选择的单元格时,行为会变得异常,如gif所示。也许我这样做是不对的?.addCheck()和.removeCheck()是我创建的自定义UICollectionViewCell类中的方法,它们所做的只是添加一个复选标记图像或从单元格视图中删除一个图像 下面是自定义单元格中的addCheck()和removeCheck()函数的外观 func addCheck

我在UICollectionView中的自定义单元格上显示复选标记时遇到问题。在最初的几次点击中,一切正常,但当我开始滚动、反复点击或单击已选择的单元格时,行为会变得异常,如gif所示。也许我这样做是不对的?.addCheck()和.removeCheck()是我创建的自定义UICollectionViewCell类中的方法,它们所做的只是添加一个复选标记图像或从单元格视图中删除一个图像

下面是自定义单元格中的addCheck()和removeCheck()函数的外观

func addCheck() {
    // create check image
    let checkImage = UIImage(named: "checkmark")
    checkImageView = UIImageView(frame: CGRect(x: 0, y: 0, width: bounds.size.height / 4, height: bounds.size.height / 4))
    checkImageView.image = checkImage!.withRenderingMode(UIImageRenderingMode.alwaysTemplate)
    checkImageView.tintColor = UIColor.white()

    // add the views
    addSubview(checkImageView)
}

func removeCheck() {
    if checkImageView != nil {
        checkImageView.removeFromSuperview()
    }
}

首先,您可以简化您的DID选择一点:

override func collectionView(collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {

    // set colors to false for selection
    for (index, color) in colorList.enumerate() {
        if index == indexPath.row {
            color.selected = false
            settings.backgroundColor = color.color
        }
        else {
            color.selected = false
        }
    }

    collectionView.reloadData()
}
根据cellForItemAt方法中的语言,我猜当您在同一单元格上点击两次时,您正在添加第二个复选标记图像,并且没有正确跟踪该图像,因此单元格会随着collectionView的重新加载而不断旋转

发布您的cell类,或者至少是addCheck和removeCheck的逻辑,我们可能会发现问题


我建议在单元格上永久设置一个带有复选标记的imageView,根据选择简单地显示/隐藏它。这也会加快collectionView的速度。

我在使用复选标记时遇到了类似的
UITableView问题。尝试创建元组数组来存储行和节值。谢谢你看。我在我的问题中添加了addCheck()和removeCheck()函数。我尝试了在每个单元格初始化时覆盖一个复选标记的方法,然后隐藏图像而不是删除图像,看起来效果不错。非常感谢你!伟大的看起来你最终会看到多个图像四处浮动
override func collectionView(collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {

    // set colors to false for selection
    for (index, color) in colorList.enumerate() {
        if index == indexPath.row {
            color.selected = false
            settings.backgroundColor = color.color
        }
        else {
            color.selected = false
        }
    }

    collectionView.reloadData()
}