如何禁用特定CollectionViewCell的用户交互,条件是每次单击更新

问题描述 投票:0回答:2

每个单元格都是一个包含变量的结构:numberOfRegistration。

如果用户单击该单元格,则numberOfRegistration将为+1。

如果counter = 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是一个包含结构的数组。

ios swift uicollectionview
2个回答
0
投票

你需要

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

当你改变numberOfRegistration它会被反映到isDisable然后你可以重新加载表的索引路径来刷新

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)])

0
投票

试试这个:

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

为了更改isDisable,您需要调用disable()方法。然后你可以检查它的变量。

© www.soinside.com 2019 - 2024. All rights reserved.