0

UIViewControllerビューに別の のビューが含まれている を考えてみましょうUIViewController

UIViewController親が子コントローラーのライフサイクル メソッドを呼び出す責任があると言うのは正しいですか? 次のような方法:

- (void)viewWillAppear:(BOOL)animated;
- (void)viewDidAppear:(BOOL)animated;
- (void)viewWillDisappear:(BOOL)animated;
- (void)viewDidDisappear:(BOOL)animated;

例えば:

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [_childViewController viewWillAppear:animated];
}

もしそうなら、どのメソッドを呼び出す必要がありますか?

これを行うより良い方法はありますか?明らかに、上記のアプローチは前方互換性がありません。新しいライフサイクル メソッドが追加された場合、新しいメソッドの呼び出しを伝播するために親クラスを変更する必要があります。

それとも、ビュー コントローラをネストするのは単に悪い考えであり、避けるべきですか?

4

2 に答える 2

2

これを行う正しい方法は、View Controller を子 View Controller として追加することです。ビュー階層 (ビューをサブビューとして追加) とビューコントローラー階層 (ビュー コントローラーを子として追加) の両方を維持する必要があります。その後、すべてのライフサイクル メソッドが呼び出されます。

関連するメソッドはaddChildViewController:didMoveToParentViewController:です。

WWDC 2011 で View Controller の封じ込めに関する講演がありました。ビデオを見ることをお勧めします。

于 2012-11-16T19:53:37.957 に答える
0

iOS 4 を引き続きサポートする階層を作成したい場合は、addChildViewController のドキュメントに詳述されているメッセージを自分で転送する必要があります。

iOS 4 がターゲットになっておらず、iOS 5 以降用にビルドするだけでよい場合は、jrturton が言ったように新しい API を使用してください。

于 2012-11-16T21:07:47.900 に答える