2012-02-24 14 views
0

ViewControllerが別のViewControllerを 'メソッド内に作成するとき(viewDidLoadまたはviewWillAppearとしましょう)は正しいですか?UIViewとUIViewControllerデザインパターン

私の場合、ビューAを持っています。これには他のいくつかのビューがあります.BとCは非常に複雑なので、特別なビューコントローラvcBとvcCがそれらのために設計されていて、これらのビューコントローラはvcAビューコントローラビューA.

これは問題ありませんか?たとえば、vcAがvcBのデリゲートとして自分自身を設定する場合はどうでしょうか?つまり、vcBはvcAを保持します。この場合、すべてのオブジェクトを正しく解放するには、vcBのデリゲートをnilに設定する必要がありますが、これを行うにはどうすればよいでしょうか? viewWillDisappear:,viewDidDisappear:またはsmth。それ以外は?

問題が起きる唯一のケースではないと私は確信していますので、ビューコントローラ間のこれらの種類のやりとりを正しく設計する方法をあなたの意見で探しています。

答えて

1

は、私がアイデアに独断的な遵守を目撃しました一度に1つのView Controllerのみが動作する必要があります。私自身は、全体の設計を単純化し(複雑さを軽減し)、設計管理を容易にするならば、同時に複数のView Controllerを使うようにしています。 recent response that I postedで読むことができるように、アップルは複数のビューコントローラを同時に操作できるカスタムコンテンツビューコントローラのサポートを提供することで、同じ方向に動いてきているようです。

ジョナ・ウィリアムズのブログは、あなたが対処しなければならないかもしれないことに気づくだけで読む価値があります。しかし、率直に言えば、私は彼のアドバイスと矛盾する問題はなかった。 (その投稿は約1歳です)

ビューコントローラのキーロールは、管理しているビューのデリゲートメソッドを保持することです。ビューは実際にどのオブジェクトがデリゲートとして機能しているか気にしません。したがって、単一VCの視点とより調和の取れたデザインが必要な場合は、デリゲートメソッドをサブクラス化されたNSObjectに配置し、ビューコントローラと呼ぶことはできません。ほとんどの場合、UIViewControllerが既に持っているメソッドのいくつかを作成する必要があります。しかし、あなたはそれをView Controllerと呼ぶ必要はありません。私はUIViewCcontrollerをサブクラス化するだけです。

0

一般的に、別のコントローラのサブビュー用に別個のビューコントローラは必要ありません。これは、ビューコントローラが動作するように設計された方法ではありません。

Appleのナビゲーションタブバーコントローラは、これを行うが、彼らは恐ろしく複雑で非標準だ(あなたがそれらをサブクラス化することができていない理由は、おそらくである。)

関連する問題