1. ホーム
  2. ios

[解決済み] dequeueReusableCellWithIdentifier と dequeueReusableCellWithIdentifier : forIndexPath を使用する場合

2022-04-23 22:43:48

質問

dequeueReusableCellWithIdentifier には 2 つのオーバーロードがあり、どのような場合に一方を使用するか、もう一方を使用するかを決定しようとしています。

forIndexPath関数に関するappleのドキュメントには、以下のように書かれています。 "このメソッドは、インデックスパスを使用して、テーブルビュー内のセルの位置に基づいて追加の設定を実行します(")。

でも、どう解釈したらいいのかわからないんだけど?

どのように解決するのですか?

最も重要な違いは forIndexPath: バージョンは、識別子のクラスまたは nib を登録しなかった場合、アサート (クラッシュ) します。 古い (非 forIndexPath: を返します。 nil の場合は

識別子に対するクラスの登録は registerClass:forCellReuseIdentifier: をテーブルビューに追加します。 nibを識別子に登録するには、テーブルビューに registerNib:forCellReuseIdentifier: をテーブルビューに送信します。

テーブルビューとセルプロトタイプをストーリーボードで作成した場合、ストーリーボードで定義したセルプロトタイプの登録は、ストーリーボードローダが担当します。

セッション200 「WWDC 2012で発表されたCocoa Touchの最新情報 を議論しています(当時は新機能)。 forIndexPath: のバージョンが8m30sあたりから始まります。 必ず初期化されたセルが得られる」と書いてあります(クラスやnibを登録しなかった場合にクラッシュすることについては触れていません)。

また、ビデオでは、「そのインデックス・パスに適したサイズになる」とも言っています。 おそらくこれは、テーブルビューの幅を見て、デリゲートの tableView:heightForRowAtIndexPath: メソッド(定義されている場合)を使用します。 そのため、インデックスパスが必要なのです。