web-dev-qa-db-ja.com

didSelectRowAtIndexPathが間違ったIndexPathを返す

本当に不可解なバグに遭遇しました。 UITableViewのfirst行が返されます 1 そしてその 二番目 一人が帰る  indexPath!それはどうして可能ですか?

私の `-(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]をタッチすると 最初 行。

行の挿入、削除、並べ替えなどはなく、スクロールもありません。これは、1つのセクションと3つの行を持つ単純なUITableView、グループ化されたスタイルです。何が原因でしょうか?

ご協力いただきありがとうございます、
S

70
Mundi

実装しました didselectRowAtIndexPath 。行が選択されなくなったときに発生します

2行目にタッチすると、1行目が選択されなくなったため、[0、1]が表示されます。
最初の行をもう一度タッチすると、2番目の行が選択されなくなったため、[0、0]が表示されます。

これらは完全に期待されています。

実装 did選択するRowAtIndexPath 行が選択されたときに応答する必要がある場合

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

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

タイトルにもかかわらず、オーバーロードされたメソッドは実際にはdidDeselectRowAtIndexPathであるため、動作は正しいようです。1行目がタッチされると、0行目が選択解除され、逆も同様です。

3