我有一张表,用于显示时区选项。我使用复选标记来显示当前选择的那个。创建表格后,我选中保存为用户时区的单元格。
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
}
但是,当我预设复选标记时,我选择新时区时不会删除它。它只有在我第一次选择它然后选择一个新的时才会起作用。是否有原因取消选择原始单元格?
答案 0 :(得分:1)
原始单元格未被取消选择的原因是它首先未被选中。启用复选标记附件不会选择单元格。
设置起来有点痛苦,但是你可以通过存储对需要选择的单元格的引用来实现这一点,并且当视图出现时,手动选择它。 。然后,取消选择将起作用。
添加一个类变量以记住应该选择的单元格
var initiallySelectedPath: NSIndexPath?
在cellForRowAtIndexPath
中设置变量(个人而言,由于将如何执行实际的单元格选择,我会在课程的其他位置执行此设置,但这足以证明一个解决方案。
...
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)
}
}
现在您的原始单元格应该在第一次点击其他单元格时取消选择。