didSelectRowAtIndexPath返回错误的IndexPath


70

我遇到了一个非常令人困惑的错误。我的UITableView的第一行返回1第二行返回0indexPath中!这怎么可能呢?

在我的`-(void)viewDidLoad`中,一切仍然很好。我正在成功突出显示第一行

currentRow = 0;
[tableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:currentRow inSection:0] 
  animated:NO scrollPosition:UITableViewScrollPositionNone];

我有currentRow用于跟踪选择哪一行的变量(另一控件会根据当前选择的哪一行而更改)。

现在在我的`didDeselectRowAtIndexPath`委托函数中,我有:

-(void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath {
...
NSLog(@"IndexPath: %@", [indexPath description]);
}

日志显示以下内容:

IndexPath: <NSIndexPath 0x79509d0> 2 indexes [0, 0]当我触摸第二行时,以及 IndexPath: <NSIndexPath 0x79509d0> 2 indexes [0, 1]当我触摸第一行时。

没有行插入,删除或排序等,甚至没有滚动。这是一个简单的UITableView,具有分组样式,具有1个部分和3行。是什么原因造成的?

谢谢你的帮助,
S

Answers:


231

您已经实现De selectRowAtIndexPath。当不再选择该行时将触发

当您触摸第二行时,不再选择第一行,因此将显示[0,1]。
当您再次触摸第一行时,现在不再选择第二行,因此将显示[0,0]。

这些是完全可以预期的。

实施选择RowAtIndexPath如果你是行的时候就需要响应选择

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    //                                       ^
    ...

    NSLog(@"IndexPath: %@", [indexPath description]);
}

15
嘿-当我自己阅读问题时,我很想念它。:-)两次使用时,就像缺少单词“ the”一样。;-)
Joshua Nozzi 2010年

3
我也是这样做的。真令人沮丧 Intellisense的使用率高达99.9%,但是其他0.1%的速度……哇。
swilliams 2012年

4
我花了几个小时试图弄清楚iOS正在使用我先前选择的行来打电话给我。我已经尝试了一切。令人惊讶的是,几个字母造成了什么变化。谜团已揭开。

1
我的天哪,我几乎开始提出一个新问题!该死的XCode自动完成功能!到处投票!
贾斯汀

令人惊讶的是有多少人遇到了这个问题。我只是花了过去的2个小时来弄清楚到底发生了什么。我讨厌你自动完成。
史蒂夫·

3

尽管有标题,但实际上重载方法是didDeselectRowAtIndexPath正确的,因此听起来似乎是正确的-触摸第一行时,取消选择了第0行,反之亦然。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.