我有一个问题与UITableView的didSelectRowAtIndexPath。

我的表已经设置好了,所以当我选择row时,它会初始化一个新的视图控制器并推送它。

当我第一次点击表中的任何一行时,该方法不会被调用。一旦我选择了另一行,它就开始正常工作。

我已经通过在didSelectRowAtIndexPath上设置断点验证了这一点。当添加一个NSLog的方法,我看到,当我选择第二行,最后推动新的视图控制器,我看到两个日志语句出现在控制台同时。

有什么建议吗?


当前回答

检查是否在类中设置了任何手势识别器。移动手势对我有用。

其他回答

UITableViewCellSelectionStyleNone被设置为显示该问题的单元格 (ios9)。

我最后还是打了个电话

[tableView deselectRowAtIndexPath:indexPath animated:NO];

首先

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

这是不一样的,但已经足够好了。 这让我很好奇ios10会带来怎样的表格破坏。

你有没有不小心输入了didDeselectRowAtIndexPath?

也检查xib文件中表视图的选择属性。按需要使用“单选”或“多选”。

当你在tableView中使用手势识别器时,这个问题也会发生,在这种情况下,你不需要删除它们,你只需要确保你的手势属性cancelsTouchesInView = false,这是一个布尔值,影响当手势被识别时触摸是否被传递到视图。

在我的例子中,我有一个带有手势识别器的UITableView节头。当点击标题时,它应该在该部分中插入几行,并使插入动画化(如展开/折叠部分)。 第一次展开和点击时,didSelectRow委托方法没有被触发。对于进一步的开采和扩展/收缩操作,它的工作情况与预期一致。

根据@Ayoub Nouri的回答,我将cancelsTouchesInView设置为false,这解决了问题。 tapGestureRecognizer ?。cancelsTouchesInView = false