5

UICollectionView を使用する場合indexPath、メソッドの値を取得することに戸惑いdidSelectItemAtIndexPathます。

didSelectItemAtIndexPathメソッドで次のコード行を使用しています。

//FileList is an NSArray of files from the Documents Folder within my app.
//This line gets the indexPath of the selected item and finds the same index in the Array
NSString *selectedItem = [NSString stringWithFormat:@"%@",[FileList objectAtIndex:indexPath.item]];

//Now the selected file name is displayed using NSLog
NSLog(@"Selected File: %@", selectedItem);

問題は、indexPath が常に 0 を返し(以下のコードを参照)、その結果、FileList NSArray の最初の項目のみが選択されることです。

次のようなさまざまなパラメーターを試しました

  • indexPath.row
  • indexPath.item
  • そしてただただindexPath

これらはすべて、次の NSLog ステートメントで値 0 を返します。

NSLog(@"index path: %d", indexPath.item); //I also tried indexPath.row here

たぶん私は NSString を不適切にフォーマットしているだけかもしれませんが、警告がなく、他の場所で別の方法でフォーマットしようとしたので、そうではないと思います。

indexPath が常に 0 を返すのはなぜですか?

どんな助けでも大歓迎です!ありがとう!

4

2 に答える 2

30

didSelectItemAtIndexPath明白なことを述べる危険を冒して、コードがdidDeselectItemAtIndexPath. indexPath後者の方法では、特定のタッチ イベントに対して非常に異なる値が取得され、Xcode のコード補完で間違った値を挿入するのは非常に簡単です。

于 2012-12-14T14:39:26.530 に答える
1

使用しているデリゲート メソッドは、選択されたセルのインデックス パスを常に提供します。NSLog 呼び出しでブレークポイントを使用してデバッグしてみてください。デバッガーが停止したら、下部のデバッグ領域を見て、コンソールを使用します (必要に応じて、表示 => デバッグ領域 => コンソールをアクティブ化)。

コンソールに次のように入力します。po indexPath

選択した項目が section:0 のリストの 5 番目にある場合、次のように表示されます (最初のセクションで、おそらく唯一のセクション)。

<NSIndexPath 0xa8a6050> 2 indexes [0, 5]

これが何が起こっているのかを理解するのに役立つことを願っています。

于 2012-10-27T14:44:09.673 に答える