为啥没有调用 didDeselectRowAtIndexPath
Posted
技术标签:
【中文标题】为啥没有调用 didDeselectRowAtIndexPath【英文标题】:why is didDeselectRowAtIndexPath not called为什么没有调用 didDeselectRowAtIndexPath 【发布时间】: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 哦,你是对的,对不起。您正在重新加载您的行,因此,不应再选择该行...看看:(保持选中状态)***.com/a/13046014/4906484 【参考方案1】:问题是由于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)
【讨论】:
以上是关于为啥没有调用 didDeselectRowAtIndexPath的主要内容,如果未能解决你的问题,请参考以下文章
为啥没有调用 paymentQueue(_:shouldAddStorePayment:_:) ?
为啥dismissWithClickedButtonIndex 从来没有调用clickedButtonAtIndex?
为啥 textFieldDidEndEditing: 没有被调用?
为啥我的 SecurityWebFilterChain 没有被调用?