У меня есть таблица, которую я использую, которая показывает параметры часового пояса. Я использую галочку, чтобы показать, какой из них выбран в данный момент. Когда таблица создана, я устанавливаю флажок в ячейке, которая сохраняется в качестве часового пояса пользователя.Swift didDeselectRowAtIndexPath не работает с предустановленной ячейкой
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
}
Однако, когда я устанавливаю галочку, она не удаляется, когда я выбираю новый часовой пояс. Он будет работать, только если я его выберу, а затем выберем новый. Есть ли причина, по которой исходная ячейка не влияет на отмену выбора?
Мое предположение заключается в том, что проверка 'accessoryType' - это просто« ментальный отбор », определенный вами, и это не имеет никакого отношения к реальному выбору. Вам может потребоваться выбрать строку примерно следующим образом: http://stackoverflow.com/questions/24787098/programmatically-emulate-the-selection-in-uitableviewcontroller-in-swift, только тогда 'didDeselectRowAtIndexPath' будет работать для вас. –
@JoeHuang, когда я использую код из этого вопроса, я получаю сообщение об ошибке, что это nil in didSelect –