Swift 3:为啥我不能在 didDeselectRowAt 中更改 cell.accessoryType 和 cell.textLabel

Posted

技术标签:

【中文标题】Swift 3:为啥我不能在 didDeselectRowAt 中更改 cell.accessoryType 和 cell.textLabel【英文标题】:Swift 3: Why cant I change cell.accessoryType and cell.textLabel in didDeselectRowAtSwift 3:为什么我不能在 didDeselectRowAt 中更改 cell.accessoryType 和 cell.textLabel 【发布时间】:2016-11-30 22:05:54 【问题描述】:

我不明白为什么我不能切换选定的表格行。 我在 didSelectRowAt 中成功设置了附件类型。 但我似乎无法在 didDeselectRowAt 中将 accessoryType 设置为 none。

我的数据:

serviceItems = ["Heater", "Air Conditioner", "Boiler", "Heat Pump"]

这是我的 tableview 覆盖:

 override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 
    let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
    cell.accessoryType = .checkmark
    let serviceItem = serviceItems[indexPath.row] as! String
    cell.textLabel?.text = serviceItem


// does not remove checkmark
// does not change textLabel to "test" 
// DOES print "DESELECTING" (so I know its getting called)
override func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) 
    let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
    cell.accessoryType = .none
    cell.textLabel?.text = "test"
    print("DESELECTING")

【问题讨论】:

UItableviewcell Checkmark to be toggled on and off when tapped SWIFT的可能重复 @theMikeSwan 你有答案,如果你想发布它 【参考方案1】:

应该一直使用tableView.cellForRow 而不是tableView.dequeueReusableCell

改变:

let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)

收件人:

let cell = tableView.cellForRow(at: indexPath)

【讨论】:

【参考方案2】:

我把所有东西都放在了 DidSelectRow 中,请看这里:

func tableView(_ tableView: UITableView, didSelectRowAtIndexPath indexPath: IndexPath)

    if let cell = tableView.cellForRow(at: indexPath) 
        if self.selectedIndexPaths.contains(indexPath)
        
            // Config Cell
            cell.accessoryType = .none
            self.selectedIndexPaths.remove(indexPath)
        
        else
        
            // Config Cell
            cell.accessoryType = .checkmark                    
            self.selectedIndexPaths.add(indexPath)
        
        // anything else you wanna do every time a cell is tapped
        

【讨论】:

以上是关于Swift 3:为啥我不能在 didDeselectRowAt 中更改 cell.accessoryType 和 cell.textLabel的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Swift 3 不能识别我的按钮点击?

为啥我不能在 Swift 的 reduce 中正确划分整数?

Swift 3 为啥不能将二元运算符“===”应用于两个“日期”操作数?

为啥我不能在 Swift 中使用 let in 协议?

为啥我不能在 Swift 中将对象数组返回给 UIStackView? [复制]

为啥我不能在 Swift5 中读取推送消息数据?