0

tableView が関連付けられたテーブル ビュー コントローラーがあります。このリストのセルには tableView も含まれています。具体的には、セルには tableView があり、セルの各インスタンスは埋め込まれた tableView を使用して、わずかに異なる名前のリストを表示しています。以下に図を示します。

  1. 親テーブルビュー
  2. __tableViewCell
  3. ____埋め込みテーブルビュー
  4. ______name1 (セル内)
  5. ______名前2」
  6. ______name3「</li>

埋め込み tableView 用のビュー コントローラーはありません。デリゲートと dataSource は両方とも、埋め込みの tableView クラスにマップされます。これはすべて絵コンテベースです。

シミュレーターでは、この設定はリストに表示される最初のいくつかのセルではうまく機能します — それぞれが独自の名前のリストを表示しています — しかし、4 番目または 5 番目のセルの後 (はい、何度か画面外にスクロールしました)、セルは引き続き表示されますが、埋め込みテーブル ビューによって生成されていません。古くて不正確な名前のリストがあります。その時点で、埋め込まれた tableView に対して awakeFromNib も initWithCoder も呼び出されません (どちらも正常に表示されたセルに対して呼び出されます)。

これは、(私にとって) 親の tableView (埋め込まれた tableView を持つセルを所有するもの) が、再利用リストから引き出しているセルを再利用していることを意味します。これにより、いくつかの疑問が生じます。

  1. なぜ細胞を再構築しようとしないのですか? 親の tableView の tableView:cellForRowAtIndexPath で、セルを取得し、いくつかの情報を入力します (たとえば、セルに UILabel があるため、それを識別できます)。そのための新しいコンテンツが機能しますが、埋め込まれた tableView の部分はセルは再構築されません。

  2. これが再利用されたセルがキャッシュから取り出された場合、キャッシュされた各アイテムを「ダーティ」としてマークして再構築できるようにするにはどうすればよいですか? tableView:didEndDisplayingCell:forRowAtIndexPath: は認識していますが、それを使用して再構築を行う方法がわかりません。たとえば、セルを削除しようとしましたが (つまり、セル = nil)、それは役に立ちませんでした (親の tableView と埋め込まれた tableView の両方でこれを行いました)。

  3. prepareForReuse の説明 (属性以上のものを変更したいので試しませんでした) では、次のように述べています。セル オブジェクトに関連付けられた再利用識別子がない場合、このメソッドは呼び出されません。このメソッドをオーバーライドする場合は、必ずスーパークラスの実装を呼び出す必要があります。」それはまさに私がやろうとしていることですが、埋め込まれた tableView はどういうわけかこれを回避しています (awakeFromNib も initWithCoder も呼び出されていないことを思い起こさせます。

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

4

0 に答える 0