为什么没有调用didDeselectRowAtIndexPath

时间:2015-11-09 09:03:32

标签: ios iphone uitableview tableviewcell

调用

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")
}

1 个答案:

答案 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)
}