71

私は本当に不可解なバグに遭遇しました。私のUITableViewの最初の行は1を返し、2番目の行は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]2列目 に触れたときと1IndexPath: <NSIndexPath 0x79509d0> 2 indexes [0, 1]列目に触れたとき。

行の挿入、削除、並べ替えなどはなく、スクロールもありません。これは、1つのセクションと3つの行を持つ、グループ化されたスタイルの単純なUITableViewです。これを引き起こしている可能性がありますか?

助けてくれてありがとう、
S

4

2 に答える 2

232

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

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

これらは完全に予想されます。

行が選択されたときに応答する必要がある場合は、 did Select RowAtIndexPathを実装します。

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

    NSLog(@"IndexPath: %@", [indexPath description]);
}
于 2010-11-07T18:20:05.123 に答える
3

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

于 2010-11-07T18:24:08.773 に答える