2012-01-22 13 views
0

iPadアプリケーションでは、いくつかのView Controllerを含むTab Controllerがあります。これらのView Controllerの1つ(MainViewControllerと呼ぶ)は、2つのテーブルビューを並べて必要とします。ビューコントローラからビューコントローラに別のビューコントローラを挿入するのはなぜ間違っていますか?

私は2つのUITableViewControllerサブクラスを書いて、MainViewControllerから、私はUITableViewControllerの両方のサブクラスを割り当てて、それぞれからMainViewControllerのビューにtableviewを追加します。

これは、UITableViewControllerサブクラスのビューがMainViewControllerのビューのサブビューであることを意味します。

この回答:https://stackoverflow.com/a/7684648/191463はそれが間違っていると言います.Appleはこれを減らし始めているようです。

MainViewControllerの両方のUITableViewControllerからすべてのコードを入力する必要はありません。読み込みが非常に難しくなります。また、別の場所でtableviewの1つを使用したい場合は、アプリはそれだけで

これは実際に問題がありますか、それはどうすれば正しくできますか?

+0

[WWDC 2011](https://developer.apple.com/videos/wwdc/2011/)のUIViewController Containment *ビデオの実装を見てください。 –

答えて

0

Appleはそれを削減していません。これは、iOS 5より前のカスタムコンテナビューコントローラを作成する唯一の方法です。Appleは実際に開発者の意見を聞き、iOS 5で子プロセスビューアと親ビューコントローラメソッドを使ってこのようなことを簡単に実行できました。それは階層的に働いた。

ほとんどの場合、これは実際にアプリケーションのクラッシュやパフォーマンスなどの点で問題にはなりません。場合によっては子ビューコントローラを持っているとしますので、問題になることがあります。ビューコントローラのビューをルートビューコントローラに追加します。 iOS 5より前の子ビューコントローラは、ナビゲーションコントローラビューコントローラ、タブバーコントローラビューコントローラ、モーダルビューコントローラなどのものでした。 [self.parentViewController dismissModalViewControllerAnimated:YES];と呼ばれるボタンがあるとどうなりますか?技術的には、ビューコントローラがモーダルビューコントローラとして表示されていないため、ビューをルートビューコントローラビューに追加しました。

iOS5では、子ビューコントローラをビューコントローラに追加でき、1つの子ビューコントローラから別の子ビューコントローラに移行することができます。

あなたのビューコントローラに別の親がない場合でも、別のルートビューコントローラに「ルート」ビューコントローラを追加することは最良の方法ではありません(特に、子ビューコントローラーでparentViewControllerポインターを明示的に作成しない限り、親ビューコントローラー)。だから、結局のところ、Appleはそれをより簡単にし、よりデカップルしました。

0

あなたがカスタム「コンテナビューコントローラ」を作成した場合

initWithNibName... 
loadView: 
viewDidLoad:... 
. 
. 
viewDidUnload.. 
dealloc 
memoryWarnings 
orientation changes 

のViewControllerのライフ・サイクル・イベントを管理する責任は、だから、それはすべてのこれらのメソッドを呼び出すために、あなたの責任となり取る限り、それを行うにはOKです適切な時間に子のviewControllerに追加します。すべてはあなたがそれはすぐに複雑になる子ども??」

に関する管理する必要がありますどのような「あなたはUITabBarControllerを実装した場合」と考えてください。サブビューとして別のViewControllerのビューはチャイルズプレイで追加。

のiOS 5親の子関係を指定することで、このようなものをいくつか行いますが、まだどこかのサンプルコードは見ていません。

0

特にAppleのエンジニアがそれを行う場合、ビューコントローラのコンテナを作成するのは間違っているとは言えません。 UITabBarController、UINavigationController、またはUISplitViewController - これらはすべてView Controllerコンテナです。ユニークなUXを備えた多くの素晴らしいアプリの多くは、あなたが思うよりも一般的なことです。しかし、実際の問題は正しい方法で行うのが非常に難しいことです。ビューのライフサイクル、メモリ管理、ローテーション処理は、ビューの階層に沿って適切に行われます。幸いアップルの連中はまともな仕事をしたし、iOS5を、コントローラコンテナに関する機能がたくさん紹介:あなたは上記の問題は、iOS5を前に対処する必要がありましたか興味があるなら、読ん

をこれら2件の非常に良いブログの記事:

関連する問題