我无法找到解决此问题的方法。我在UISwitch
里面使用UICollectionViewCell
,我正在传递一个布尔变量来设置开关。
条件是所有单元中一次只有一个开关必须打开。但是当我打开一个开关时,另一个随机开关的色调会发生变化,这意味着它的状态发生了变化。
默认情况下,故事板中的开关状态为 ON,即使我将其设置为 OFF,也没有任何变化。
我不明白为什么会这样。
这是我的代码cellForItemAtIndexPath
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: AddEditItemPopupView.cellId, for: indexPath) as! DiscountCollectionViewCell
cell.delegate = self
let currentDiscount = allDiscounts[indexPath.item]
let shouldApplyDiscount = updatedDiscountId == currentDiscount.id
cell.updateCellWith(data: currentDiscount, applyDiscount: shouldApplyDiscount)
return cell
}
以及单元类的代码
func updateCellWith(data: DiscountModel, applyDiscount: Bool) {
let name = data.title.replacingOccurrences(of: "Discount ", with: "")
self.titleLabel.text = String(format: "%@ (%.2f%%)", name, data.value)
self.switchApply.isOn = applyDiscount
self.switchApply.tag = data.id
}
数据源包含DiscountModel
如下所示的对象:
{
id: Int!
title: String!
value: Double!
}
单元类中的开关值更改方法:
@IBAction func switchValueChanged(_ sender: UISwitch) {
if sender.isOn {
self.delegate?.switchValueDidChangeAt(index: sender.tag)
}
else{
self.delegate?.switchValueDidChangeAt(index: 0)
}
}
视图控制器类中的委托方法:
func switchValueDidChangeAt(index: Int) {
self.updatedDiscountId = index
self.discountCollectionView.reloadData()
}