web-dev-qa-db-ja.com

UITableViewセルIndexPath

セルIndexPathを取得する方法を教えてもらえますか? IndexPathをtableView:cellForRowAtIndexPath:メソッドに保存していましたが、これはセルが表示されたときにのみ読み込まれ、viewDidLoadメソッドでそのインデックスパスを知る必要があります。私が言ったように、セルが一度表示された後にのみその値をロードするため、これはnull値になりました。

ありがとうございました。

編集

その意図は、特定の数を持つが、セクションと行の数と線形ではない特定のセルにジャンプできるようにすることです。

17

TableViewでメソッド indexPathForCell: を使用し、UITableViewCellへのポインタを指定してindexPathを返します。

viewWillAppearでまだ設定されていない場合は、scrollToRowAtIndexPath:atScrollPosition:animated:viewDidLoadメソッドに入れることができます。とにかく、モーダルビューコントローラーが辞任を呼び出す場合など、ビューがロードされた後に複数回表示される可能性がある場合は、これが適した場所です。

18
progrmr

UITableViewCellにはNSIndexPathプロパティがありません。 UITableViewDataSourceデリゲートは、特定のNSIndexPathのセルを要求するメソッドを定義しますが、それはセルがNSIndexPathプロパティと永続的な関係を持っていることを意味しません。

この物件が何のために欲しいのかをもっと説明していただければ助かりますか? viewDidLoad内のセルの場所をどうしますか?

2
pkananen

これを試してみてください。

    NSSet *touches = [event allTouches];
UITouch *touch = [touches anyObject];
CGPoint currentTouchPosition = [touch locationInView:EventlistTable_obj];
NSIndexPath *indexPath = [EventlistTable_obj indexPathForRowAtPoint: currentTouchPosition];
 NSLog(@"Selected  row:%d in section:%d",indexPath.row,indexPath.section);

このように電話してください:

[cell.fourth_image_button addTarget:self action:@selector(Btn_pressed:event:) forControlEvents:UIControlEventTouchUpInside];
1
Gaurav

あなたがあなた自身の質問に答えたように私には思えます:あなたはできません。 viewDidLoadの実行時にセルにindexPathがないためです。実際、セルのデキュー(Nice Word!)を使用すると、まったく同じセルを再利用して10分の1秒以内に別のインデックスに配置できるため、後で1つもありません。

編集:Ok私はあなたが望むものを見ていると思います:あなたはあなたがtableViewにセルを渡すときにどこかにあなた自身でindexPathを保存しています。特定のセルがどのindexPathに配置されているかを実際に知ることができます。少なくとも、必要な方法で実行している場合はそうではありません。

したがって、できることは、viewDidLoadメソッドですべてのセルを作成し、それらを配列に格納し、テーブルビューがそれらを要求したときに、その配列からセルを渡すだけです。

これは、セルの再利用を妨げるため、テーブルビューにデータを入力するのに適した方法ではないことに注意してください。より良い方法は、セル(プレーンUIView)のcontentsを配列に保存し、セルを返す前にそれらを子としてセルのコンテンツビューに追加することです。これにより、セルの再利用が可能になります。これは、優れたパフォーマンスにとって非常に重要です。画面に収まるよりも多くのセルがない場合でも、それらを再利用することを心配する必要はありません。

0
Felixyz