Как отключить взаимодействие с пользователем конкретной CollectionViewCell с условием обновления за клик

#ios #swift #uicollectionview

#iOS #swift #uicollectionview

Вопрос:

Каждая ячейка представляет собой структуру, содержащую переменную: numberOfRegistration .

Если пользователь нажимает на эту ячейку, numberOfRegistration будет 1.

Взаимодействие с пользователем ячейки будет отключено, если счетчик = 5 или более.

Я как-то придумал это, но это не сработало.

 struct hourSlot{
    var hoursService:String
    var numberOfRegistration:Int = 0
    var isDisable:Bool = false
    mutating func disable(){
        if numberOfRegistration >= 5{
            isDisable = true
        }
    }
}
  

и в cellForItemAt:

 var isDisableCell = hoursArray[indexPath.item].isDisable
if isDisableCell{
    cell.isUserInteractionEnabled = false
}
  

Примечание: hoursArray — это массив, содержащий структуры.

Ответ №1:

Вам нужно

 struct hourSlot{
    var hoursService:String
    var isDisable:Bool = false
    var numberOfRegistration:Int = 0 {
        didSet {
            if numberOfRegistration >= 5 {
                isDisable = true
            }
        }
    } 
}
  

Когда вы измените numberOfRegistration , это будет отражено isDisable , и вы сможете перезагрузить этот indexpath таблицы для обновления

 var isDisableCell = hoursArray[indexPath.item].isDisable
if isDisableCell{
  cell.isUserInteractionEnabled = false   
} 
else {
  cell.isUserInteractionEnabled = true
}
  

Или в ближайшее время

 cell.isUserInteractionEnabled = !(hoursArray[indexPath.item].isDisable)
  

Перезагружайте после каждого изменения

 collectionView.reloadItems(at: [IndexPath(item:changedRow, section: 0)])
  

Комментарии:

1. Подождите, мне нужно что-нибудь перезагрузить, чтобы применить изменение? (Потому что это не работает)

2. Это может быть глупый вопрос, но что мне нужно перезагрузить и как это сделать?

3. проверьте редактировать, если вы это сделаете didSelectRowAt , а затем перезагрузите там см. Редактировать

Ответ №2:

Попробуйте это:

 let hourSlot = hoursArray[indexPath.item]
hourSlot.disable()
if hourSlot.isDisable{
    cell.isUserInteractionEnabled = false
}
  

Чтобы изменить isDisable, вам необходимо вызвать метод disable(). И затем вы можете проверить его переменную.

Комментарии:

1. Я предполагаю, что это должно быть isDisable вместо isDisableCell so Я изменил его, но это все равно не сработало