gpt4 book ai didi

Swift didDeselectRowAtIndexPath 不适用于预设单元格

转载 作者:行者123 更新时间:2023-11-30 10:07:42 26 4
gpt4 key购买 nike

我使用了一个显示时区选项的表格。我使用复选标记来显示当前选择的是哪一个。创建表后,我选中保存为用户时区的单元格。

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

let cell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "cellData")

switch indexPath.row {
case 0: cell.textLabel?.text = "Eastern"
case 1: cell.textLabel?.text = "Central"
case 2: cell.textLabel?.text = "Mountain"
case 3: cell.textLabel?.text = "Mountain (No DST)"
case 4: cell.textLabel?.text = "Pacific"
default: cell.textLabel?.text = ""
}

cell.selectionStyle = UITableViewCellSelectionStyle.None

if(cell.textLabel?.text == keychain.get("timezone")) {

cell.accessoryType = UITableViewCellAccessoryType.Checkmark

}

return cell
}

然后,当用户选择新时区时,我使用这些函数来更改复选标记。

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

tableView.cellForRowAtIndexPath(indexPath)!.accessoryType = UITableViewCellAccessoryType.Checkmark

}

override func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) {

tableView.cellForRowAtIndexPath(indexPath)!.accessoryType = UITableViewCellAccessoryType.None

}

但是,当我预设复选标记时,当我选择新时区时,它不会被删除。仅当我首先选择它然后选择一个新的时它才会起作用。取消选择时原始单元格不受影响是否有原因?

最佳答案

您的原始单元格未被取消选择的原因是它一开始就没有被选择。启用复选标记附件不会选择单元格。

设置起来有点麻烦,但是实现此功能的一种方法是存储对需要选择的单元格的引用,并且当 View 将出现时,手动选择它。然后,取消选择就会起作用。

添加一个类变量来记住应选择的单元格

varinitialSelectedPath: NSIndexPath?

cellForRowAtIndexPath 中设置变量(就我个人而言,由于实际单元格选择的执行方式,我会在类的其他位置进行此设置,但这足以演示 < em>一个解决方案。

...
if (cell.textLabel?.text == keychain.get("timezone")) {
cell.accessoryType = UITableViewCellAccessoryType.Checkmark
initiallySelectedPath = indexPath
}
...

然后,在您的viewWillAppear

override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
if let indexPath = initiallySelectedPath {
// I force unwrap (sorry!) my tableView, you'll need to change this to however you reference yours
tableView!.selectRowAtIndexPath(indexPath, animated: false, scrollPosition: UITableViewScrollPosition.None)
}
}

现在,您的原始单元格应该在第一次点击不同的单元格时取消选择。

关于Swift didDeselectRowAtIndexPath 不适用于预设单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35109645/

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