第一个Load上的UICollectionView中的SelectItem

时间:2016-09-19 18:17:46

标签: swift select uicollectionview row cell

我有一个UICollectionView,用户可以在单元格上选择使用其中的Function。所以我需要它将第一个单元格设置为像第一个屏幕截图中一样选择。但问题是当选择单元格并且用户想要选择其他单元格时,第一个单元格不会取消选择。我已经尝试重新加载tableview in did select item但是没有运行或者在viewdidload中使用此func LabelCollectionView.selectItem(at: IndexPath(row: 1, section: 0), animated: true, scrollPosition: .bottom)

有谁知道我能在那里制作什么?谢谢你的帮助:)

First Cell Selected

Here you see the Problem in the screenshot

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "StoryLabelCell", for: indexPath) as! StoryLabelCell


    let labels = Labels[indexPath.row]


    cell.backgroundColor = UIColor.lightGray
    cell.layer.cornerRadius = 10

    cell.Title.text = labels



    if indexPath.row == 0 {
        cell.backgroundColor = darkgrau
        cell.layer.borderColor = black.cgColor
        cell.layer.borderWidth = 2.0
    }


    return cell

}



func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    let cell = collectionView.cellForItem(at: indexPath) as! StoryLabelCell


    if indexPath.row == indexPath.row {
        cell.backgroundColor = darkgrau
        cell.layer.borderColor = black.cgColor
        cell.layer.borderWidth = 2.0
    }

}




func collectionView(_ collectionView: UICollectionView, didDeselectItemAt indexPath: IndexPath) {
    let cell = collectionView.cellForItem(at: indexPath) as! StoryLabelCell


    if indexPath.row == indexPath.row {

        cell.backgroundColor = lightGray
        cell.layer.borderWidth = 0
    }

}

2 个答案:

答案 0 :(得分:0)

您在检查indexPath.row == indexPath.row时想要做什么?基本上,您可以在选中时使用cell.selected = true,并在取消选择时将其设置为false。尝试下面的代码,让我知道它是否有效。

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "StoryLabelCell", for: indexPath) as! StoryLabelCell

    let labels = Labels[indexPath.row]
    cell.backgroundColor = UIColor.lightGray
    cell.layer.cornerRadius = 10
    cell.Title.text = labels

    if indexPath.row == 0 {
        cell.backgroundColor = darkgrau
        cell.layer.borderColor = black.cgColor
        cell.layer.borderWidth = 2.0
        cell.selected = true
    }

    return cell
}

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    let cell = collectionView.cellForItem(at: indexPath) as! StoryLabelCell

    cell.backgroundColor = darkgrau
    cell.layer.borderColor = black.cgColor
    cell.layer.borderWidth = 2.0
    cell.selected = true
}

func collectionView(_ collectionView: UICollectionView, didDeselectItemAt indexPath: IndexPath) {
    let cell = collectionView.cellForItem(at: indexPath) as! StoryLabelCell

    cell.backgroundColor = lightGray
    cell.layer.borderWidth = 0
    cell.selected = false
}

答案 1 :(得分:0)

你应该使用Cells选择状态,而不是比较两个相同的值。

在自定义单元格中,您会对单元格选择做出反应!

override func setSelected(_ selected: Bool,  animated: Bool) {
    // change your cell like you want
    if selected {
        // make me dark
    } else { 
        // make me light
    }
    // not tested, but somehow call the super
    super.setSelected(selected:selected, animated: animated)
}

你可以删除你的didSelect和didDeselct func。

在函数cellForItem中...你可以检查是否选中了一个单元格,如果没有选择一个单元格,则选择indexPath.row == 0

用于检查所选单元格

collectionView.indexPathForSelectedItems

这是列表,因此您可以选择多个单元格。我不确定,但我认为你可以设置具有多个选择的collectionView只有一个选择。

我希望这对你有帮助。