处理表视图中的取消选择行

时间:2016-07-19 17:17:28

标签: ios uitableview

我想处理当用户通过点击此行取消选择行(已选择)时的情况。众所周知,在这种情况下未调用tableView:willDeselectRowAtIndexPath: / tableView:didDeselectRowAtIndexPath:委托方法:仅当您点击其他未选中的行时才会调用它们(我的表格视图具有单一选择模式)。

当我取消选择行时,

tableView:didSelectRowAtIndexPath:方法也没有被调用。

有没有简单的解决方案?

更新

问题出在tableView:willSelectRowAtIndexPath:方法中,在某些情况下,我返回nil,这就是tableView:didSelectRowAtIndexPath:没有调用的原因。感谢@Nekto提供有用的信息和帮助。

3 个答案:

答案 0 :(得分:1)

我有这样的用例。为什么你不为lastSelectedRow创建一个变量(这里我有问题NSIndexPath并且我使用了两个整数)和选择行的方法只需比较currentSelectedRow和{{ 1}}。

答案 1 :(得分:1)

您仍然可以使用tableView:didSelectRowAtIndexPath,只需使用它就像复选标记系统一样。

答案here解释了如何使用复选标记。您可以使用此功能,或使用答案here

答案 2 :(得分:0)

Apple docs接着谈到- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

  

当表的编辑属性设置为YES(即表视图处于编辑模式)时,不会调用此方法。

这意味着应该调用此方法,除非您的代码有错误或者您没有更新{1}}表格视图或表格处于编辑模式。

可能存在的问题之一可能是您错误地实施了delegate并且正在为所选行返回- (NSIndexPath *)tableView:(UITableView *)tableView willDeselectRowAtIndexPath:(NSIndexPath *)indexPath。在这种情况下,nil不会被调用:

  

如果您不想取消选择该行,则返回nil。

或者,您可以实现另一个表视图委托方法:didSelect...

  

告诉委托,突出显示已从指定索引路径的行中删除。

详细了解如何管理表格视图中的选择here