gpt4 book ai didi

ios - Collection View - 如何在每个部分中只选择一个单元格

转载 作者:行者123 更新时间:2023-11-28 23:19:55 25 4
gpt4 key购买 nike

我的收藏 View 有多个部分。我想要实现的是用户只能在每个部分中选择一个单元格(答案)。选择单元格(答案)后,背景颜色将发生变化。

我没有做的是那个例子:当用户点击第 1 部分中的一个单元格时,我只想取消选择第 1 部分中的另一个单元格。

下面是我的一些代码

    @IBOutlet var step3CollectionView: UICollectionView!

var HexColor = HexColorClass()
var dataPageThree : json_PageThree!
var step3AnswerArray : [Int] = []


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

var frameCount = dataPageThree.step_instruction.first!.subquestions.count

for i in 0..<frameCount{

if indexPath.section == i {
step3AnswerArray[i] = (dataPageThree.step_instruction.first?.subquestions[i].subquestion_selection_answerNums![indexPath.row])!


let callCell = self.step3CollectionView.cellForItem(at: indexPath) as? Step3CollectionViewCell

callCell!.answerLabel.backgroundColor = HexColor.hexStringToUIColor(hex: "117577")

callCell!.answerLabel.textColor = UIColor.white

}

}

}

func collectionView(_ collectionView: UICollectionView, shouldSelectItemAt indexPath: IndexPath) -> Bool {


let indexPaths = collectionView.indexPathsForSelectedItems
if (indexPaths?.count) ?? 0 > 0 {

/// If you need simple way
for index in indexPaths! {
if index.section == indexPath.section {
self.step3CollectionView.deselectItem(at: index, animated: true) // if want deselect previous selection

let callCell = self.step3CollectionView.cellForItem(at: index) as? Step3CollectionViewCell

callCell!.answerLabel.backgroundColor = UIColor.white

callCell!.answerLabel.textColor = UIColor.black
//return false //if you do not want further selection
}
}


}

return true
}

需要一些指导。

最佳答案

首先,将collectionView的 allowsMultipleSelection属性设置为true,即

override func viewDidLoad() {
super.viewDidLoad()
self.step3CollectionView.allowsMultipleSelection = true
}

现在,UICollectionViewDelegate 方法 collectionView(_: shouldSelectItemAt:) 应该看起来像,

func collectionView(_ collectionView: UICollectionView, shouldSelectItemAt indexPath: IndexPath) -> Bool {
collectionView.indexPathsForSelectedItems?.filter({ $0.section == indexPath.section }).forEach({ collectionView.deselectItem(at: $0, animated: false) })
return true
}

此外,不要根据 shouldSelectItemAtdidSelectItemAt 更改 cellbackgroundColour >单元格的选择。这使代码变得庞大和冗余。

它应该在 UICollectionViewCell 子类中通过覆盖 isSelected 属性来完成。

class Step3CollectionViewCell: UICollectionViewCell {        
override var isSelected: Bool {
didSet {
self.answerLabel.backgroundColor = isSelected ? HexColor.hexStringToUIColor(hex: "117577") : .white
self.answerLabel.textColor = isSelected ? .white : .black
}
}
}

有了上面的代码,也就不用在collectionView(_:didSelectItemAt:)方法中写color的变化代码了。将自动处理用于选择和取消选择 cell 的 UI。

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
step3AnswerArray[indexPath.section] = (dataPageThree.step_instruction.first?.subquestions[i].subquestion_selection_answerNums![indexPath.row])!
}

关于ios - Collection View - 如何在每个部分中只选择一个单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59786132/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com