在programForRowAtIndexPath中以编程方式选择单元格后未触发didDeselectRowAtIndexPath方法

时间:2016-04-20 13:18:36

标签: ios swift uitableview

我面临一个奇怪的问题。我有一个启用了多个选择的tableview。在cellForRowAtIndexPath方法中,我有以下代码:

if getSelectionStatusForItemAt(indexPath.row)
{
    cell.selected = true
    self.tblPayments.selectRowAtIndexPath(indexPath, animated: true, scrollPosition: UITableViewScrollPosition.None)
}

return cell

重新加载数据后,选择单个/多个单元格。 indexPathsForSelectedCells方法也返回非空数组。但问题是,当我再次触摸其中一个单元格时,会调用didSelectRowAtIndexPath方法而不是didDeselectRowAtIndexPath

我认为我错过了tableview委托工作的方式。

1 个答案:

答案 0 :(得分:1)

当您致电self.tblPayments.selectRowAtIndexPath(indexPath, animated: true, scrollPosition: UITableViewScrollPosition.None)时,您正在选择该行,但是在您取消选择该行之前它一直处于选中状态,这就是为什么didSelectRowAtIndexPath被调用而didDeselectRowAtIndexPath未被调用的原因。
要在didDeselectRowAtIndexPath致电didSelectRowAtIndexPath后选择您应该选择的小区后致电tableView.deselectRowAtIndexPath(indexPath, animated: true)。另一种选择是尽可能在didSelectRowAtIndexPath进行操作。