如何禁用特定CollectionViewCell的用户交互,且条件为每次点击更新

时间:2019-04-09 16:25:17

标签: ios swift uicollectionview

每个单元格都是一个包含变量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是包含结构的数组。

2 个答案:

答案 0 :(得分:0)

尝试一下:

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

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

答案 1 :(得分: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)])