【问题标题】: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 哦,你是对的,对不起。您正在重新加载您的行,因此,不应再选择该行...看看:(保持选中状态)stackoverflow.com/a/13046014/4906484

标签: ios iphone uitableview tableviewcell


【解决方案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)
}

【讨论】:

    猜你喜欢
    • 2015-04-10
    • 2012-04-06
    • 2012-08-11
    • 2011-10-27
    • 2020-07-19
    • 2019-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多