gpt4 book ai didi

ios - 第一次点击后表格 View 单元格被取消选择。

转载 作者:搜寻专家 更新时间:2023-11-01 06:56:00 25 4
gpt4 key购买 nike

enter image description here

Gif 描述:

当用户第一次选择表格 View 单元格时(第一次勾选复选框),单元格被选中但之后它会自动取消选择,当我第二次点击时没有任何反应。但是,当我第三次点击单元格时,单元格被正确选中,第四次点击时,它正确取消选择,依此类推第五次、第六次。

我的 didSelectRowAt() 方法如下所示:

func expandableTableView(_ expandableTableView: LUExpandableTableView, didSelectRowAt indexPath: IndexPath) {

let cell = expandableTableView.cellForRow(at: indexPath) as! FilterTableCell

let dictKey : String = FilterKeysMapping[FilterKeysFront.object(at: indexPath.section) as! String]!

if(self.FilterDictAPI[dictKey] == nil){
self.FilterDictAPI[dictKey] = [indexPath.row: self.FilterValueArray.object(at: indexPath.row)]
}
else{
self.FilterDictAPI[dictKey]![indexPath.row] = self.FilterValueArray.object(at: indexPath.row)
}

self.expandableTableView.beginUpdates()
cell.button.isSelected = true
self.expandableTableView.reloadRows(at: [indexPath], with: .automatic)
self.expandableTableView.endUpdates()
expandableTableView.selectRow(at: indexPath, animated: true, scrollPosition: .none)
}

didDeselectRowAt() 方法是这样的:

   func expandableTableView(_ expandableTableView: LUExpandableTableView, didDeselectRowAt indexPath: IndexPath) {

print("Did Deselect Cell at section \(indexPath.section) row \(indexPath.row)")
let cell = expandableTableView.cellForRow(at: indexPath) as! FilterTableCell
cell.button.isSelected = false
let dictKey : String = FilterKeysMapping[FilterKeysFront.object(at: indexPath.section) as! String]!

if(self.FilterDictAPI[dictKey] != nil){
self.FilterDictAPI[dictKey]?.removeValue(forKey: indexPath.row)
}
print("dict after removing values : \(self.FilterDictAPI)")
}

cellForRowAt() 方法是:

   func expandableTableView(_ expandableTableView: LUExpandableTableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

guard let cell = expandableTableView.dequeueReusableCell(withIdentifier: cellReuseIdentifier) as? FilterTableCell else {
assertionFailure("Cell shouldn't be nil")
return UITableViewCell()
}
cell.selectionStyle = UITableViewCellSelectionStyle.none
cell.label.text = "\(self.FilterValueArray.object(at: indexPath.row))" + " (" + "\(self.FilterCountArray.object(at: indexPath.row))" + ")"
return cell
}

表格 View 单元格是:

class FilterTableCell: UITableViewCell {

let label = UILabel()
let button = UIButton()
var check = Bool()

// MARK: - Init

override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)

contentView.addSubview(label)
contentView.addSubview(button)
}

required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}

// MARK: - Base Class Overrides

override func layoutSubviews() {
super.layoutSubviews()

label.frame = CGRect(x: 42, y: 0, width: contentView.frame.width-42, height: contentView.frame.height)
self.label.font = UIFont(name: "PlayfairDisplay-Regular", size: 18)
button.frame = CGRect(x:10, y: contentView.frame.height/2-8, width: 16, height: 16)
button.setImage(UIImage(named: "CheckboxUnchecked"), for: .normal)
button.setImage(UIImage(named: "CheckboxChecked"), for: .selected)
button.setImage(UIImage(named: "CheckboxUnchecked"), for: .highlighted)
}

}

提到的问题只是这个:第一次点击后它会自动取消选择。

最佳答案

当您重新加载该 indexPath 时,didSelectRowAt 中究竟发生了什么,该单元格将自动取消选择,并且调用 didDeselectRowAt 方法,其中 cell.button.isSelected = false 删除复选标记。

因此,要修复此注释,请在 didSelectRowAt 方法中删除以下行。

self.expandableTableView.beginUpdates()
self.expandableTableView.reloadRows(at: [indexPath], with: .automatic)
self.expandableTableView.endUpdates()

此外,在单元格的 prepareForReuse() 方法中重置按钮的选定状态。这将修复随机选中复选框或在第一次或第二次点击后选中复选框的未定义行为。

override func prepareForReuse() {
super.prepareForReuse()

button.isSelected = false
}

关于ios - 第一次点击后表格 View 单元格被取消选择。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53317707/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com