8

奇妙なケースがあります。独自のビューを作成し、loadViewそれを既存のビューに追加するビュー コントローラーです。

VC を作成して追加するコードは次のとおりです。

self.doneButtonViewController = [[DoneButtonViewController alloc] init];
[self.view addSubview:self.doneButtonViewController.view];

このコードはviewDidLoad、「親」VC で実行されます。

奇妙なことviewWillAppearに、追加された VC のメソッドが呼び出されることはありません (または呼び出されませんviewDidAppear) が、期待どおりviewWillDisappearに、追加された VC のメソッドが(適切なタイミングで) 呼び出されます。

viewWillAppearなぜ呼び出されないのかについての手がかりはありますか?

4

2 に答える 2

15

これを行うと、アプリケーションはサブビューのビュー コントローラーを認識しません。ルート ビュー コントローラーを認識させるには、ビュー コントローラー コンテインメントを導入する必要があります。そうすることで、このようなイベントが処理されます。

loadViewは iOS 6 より前に複数回呼び出される可能性があるため、 内にビュー コントローラーを作成し、 内initにサブビューを追加することをお勧めしますloadView。次のようになります。

- (id)init {
    ...
    self.doneButtonViewController = [[DoneButtonViewController alloc] init];
    [self addChildViewController:self.doneButtonViewController];
    [self.doneButtonViewController didMoveToParentViewController:self];
    ...
}

- (void)loadView {
    ...
    [self.view addSubview:self.doneButtonViewController.view];
    ...
}

http://developer.apple.com/library/ios/#documentation/uikit/reference/UIViewController_Class/Reference/Reference.htmlの「コンテナ ビュー コントローラの実装」を参照してください。

于 2012-11-27T22:21:59.783 に答える