【发布时间】:2015-11-09 09:03:32
【问题描述】:
didSelectRowAtIndexPath 被调用,但 didDeselectRowAtIndexPath 未被调用。我不知道为什么。我在网上搜索。很多类似的问题,但我没有找到答案。
这是我的桌面视图
//tableView
let tempTableView = UITableView()
tempTableView.delegate = self
tempTableView.dataSource = self
tempTableView.translatesAutoresizingMaskIntoConstraints = false
self.view.addSubview(tempTableView)
self.tableView = tempTableView
这是委托人
//MARK: UITableViewDelegate
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
self.cayegoryArray[indexPath.row].isSelected = true
self.tableView?.reloadRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.None)
}
func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) {
self.cayegoryArray[indexPath.row].isSelected = false
self.tableView?.reloadRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.None)
}
这是单元格。
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
self.selectionStyle = .Default
setInterface()
setLayout()
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
【问题讨论】:
-
"tableView(_:didDeselectRowAtIndexPath:) 只会在另一个单元格被选中后被调用。"
-
您确定没有调用“didDeselect...”吗?还是它被调用并且 tableView 没有重新加载?两件事:将 pint() 添加到“didDeselect...”中以确保它没有被调用,另一件事:确保单元格被选中。
-
@FattiKhan 当我第二次点击不同的单元格时,它会被调用。
-
@rose:这是所需的行为,当取消选择单元格时,将调用 didDeselect 方法。当您第一次点击一个单元格时,之前没有选择任何单元格(因此不会调用 didDeselect)。当您点击另一个单元格时,那个时候会有一个先前选择的单元格,并且该方法将被调用。
-
@rose 哦,你是对的,对不起。您正在重新加载您的行,因此,不应再选择该行...看看:(保持选中状态)stackoverflow.com/a/13046014/4906484
标签: ios iphone uitableview tableviewcell