1

iOS でマスター/詳細ビュー階層を実装するための推奨される方法について簡単な質問があります。これは、1 つの画面でテーブル内の行を選択すると、そのアイテムの詳細ビューがナビゲーション スタックにプッシュされるようなものです。

具体的には、詳細ビュー コントローラーの同じインスタンスを再利用し、そのターゲットを変更して毎回再読み込みする必要がありますか、それともビュー コントローラーの新しいインスタンスを毎回インスタンス化する必要がありますか?

一般的にはより効率的であるように見えるため、最初の方法を好みますが、ターゲットを設定してリロードを行う方法を理解するのに苦労しています(特に、ビューコントローラーがまだ初期化されていない場合は特に- -私はストーリーボードを使用しており、初期化自体のすべてをほとんど処理します)。

または、子のView Controllerにターゲットを設定する代わりに、親に設定して、子のView Controllerが表示されるたびに、親の選択に基づいて自分自身をリロードすることができますか? 以前にこれに遭遇した人からのヒント/警告を探しているだけです.

4

1 に答える 1

2

まず、毎回新しいビュー コントローラーを作成しても問題はありません。セグエを使用すると、セグエは常に新しいコントローラーをインスタンス化するため、それが得られます。詳細コントローラーは、ポップまたは非表示にすると割り当てが解除されるため、保持されません。

同じコントローラーを使用する場合は、コードで push または presentViewController を実行する必要があります。ストーリーボードでコントローラーをセットアップすることもできます。識別子を付けますが、セグエで接続しないでください。コードでは、コントローラーの存在を確認し (そのためのプロパティが必要です)、存在しない場合は作成します。

if (! self.detailController) {
    DetailController *dvc = [self.storyboard instantiateViewControllerWithIdentifier:@"MyIdentifier"];
}
self.dvc.whateverProperty = self.somePropertyIWantToPass; // pass some date to it
[self.navigationController pushViewController:dvc animated:YES completion:nil];
于 2013-08-05T05:05:35.037 に答える