didSelectRowAtIndexPath ,但未调用 didDeselectRowAtIndexPath 。我不知道为什么。我在线搜索。许多类似的问题,但我找不到答案。
这是我的tableview
//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")
}
答案 0 :(得分:5)
问题是由于self.tableView?.reloadRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.None)
导致单元格被重新加载,因此永远不会取消选择。
您可以在重新加载单元格后添加self.tableView?.selectRowAtIndexPath(indexPath, animated: false, scrollPosition: .None)
来修复这些问题
即
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
self.cayegoryArray[indexPath.row].isSelected = true
self.tableView?.reloadRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.None)
self.tableView?.selectRowAtIndexPath(indexPath, animated: false, scrollPosition: .None)
}