ChatGPT解决这个技术问题 Extra ChatGPT

didSelectRowAtIndexPath 返回错误的 IndexPath

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

在我的 `-(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] 当我触摸 second 行时,IndexPath: <NSIndexPath 0x79509d0> 2 indexes [0, 1] 当我触摸 first 行时。

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

谢谢你的帮助,S


k
kennytm

您已实施 didDeselectRowAtIndexPath。当行不再被选中时,它将被触发。

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

这些是完全可以预料的。

如果您需要在行被选中时做出响应,请实施 didSelectRowAtIndexPath

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

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

嘿-当我自己阅读问题时,我错过了。 :-) 当它被使用两次时,就像错过了“the”这个词。 ;-)
我也是这样做的。多么令人沮丧。 Intellisense 在 99.9% 的情况下都很棒,但其他 0.1% 的情况......哇。
我只是花了几个小时试图弄清楚 iOS 用我之前选择的行给我打电话。我什么都试过了。令人惊讶的是,几个字母有多大的不同。谜团已揭开。
天哪,我几乎开始了一个新问题!该死的XCode自动完成!全场点赞!
令人惊讶的是有多少人遇到过这个问题。我只是花了过去 2 个小时试图弄清楚到底发生了什么。我讨厌你自动完成。
佚名

尽管标题如此,重载的方法实际上是 didDeselectRowAtIndexPath,所以听起来行为是正确的——当第 1 行被触摸时,第 0 行被取消选择,反之亦然。


关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅