У меня проблемы с поиском решения этой проблемы.
Я использую UISwitch
внутри UICollectionViewCell
и передаю логическую переменную для включения или выключения.
Условие - только один переключатель должен быть включен одновременно из всех ячеек.
Но когда я включаю один переключатель, меняется цвет оттенка другого случайного переключателя, что означает, что его состояние изменилось.
По умолчанию статус переключателя включен в раскадровке, и даже если я установил его, ничего не изменится.
Я не мог понять, почему это происходит.
Вот мой код для 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()
}