0

現在、ViewDidLoad のどこかでこのコードを使用する必要があります -

[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:CellIdentifier];

古い方法でセルが実際にキューによって返されたかどうかを確認することで、古い方法の何が問題だったのかわかりません

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

私を混乱させるのは、なぜ関係のない場所で任意のメソッド呼び出しを使用するのか、そしてこの「登録」メソッドはとにかく何をするのでしょうか?

4

1 に答える 1

2

Apple が NIB ファイルからセルをインスタンス化するショートカット メソッドを導入したのは、iOS 5 以降で、次の 3 つの段階があります。

  1. セル識別子のプロパティの宣言
  2. セルを含む NIB オブジェクトを登録し、それをセル識別子に関連付ける
  3. セル自体を作成する (そして通常どおりコントロールをカスタマイズする)

NIB オブジェクトの登録は、コントローラーの有効期間中に 1 回だけ行う必要があるため、コードを配置する明白な場所viewDidLoadは、tableView のコントローラーのメソッドです。

cellIdentifier = @"CustomCell";
[tableView registerNib:[UINib nibWithNibName:@"customCell" bundle:nil]

これには 2 つのパラメーターが必要です。

  1. UINib のnibWithNibNameメソッドに渡すことで取得する UINib のインスタンスへの参照
  2. 以前に作成されたNSStringセル識別子

NIB がセルとして使用するために登録された後、dequeueReusableCellWithIdentifierメソッドは次の 2 つのいずれかを実行します。

  1. 再利用できるキャッシュされたセルがある場合、そのセルはキューから取り出され、セル変数を介してアクセスできます。
  2. 再利用できるセルがない場合は dequeueReusableCellWithIdentifier、登録済みの NIB からセルを作成します。

これらは両方ともバックグラウンドで行われるため、セルの存在を手動でチェックする必要がなくなりましたdequeueReusableCellWithIdentifier がすべてを処理します

于 2013-02-21T13:33:43.207 に答える