3

これは長い間頭に浮かんでおり、View Controller によって管理されるビューを別の View Controller のビューに適切に追加する方法がよくわかりません。

ビューの読み込みが完了していないため、これは機能しません

self.messageViewController = [[PopupMessagesViewController alloc] initWithNibName:@"PopupMessagesViewController" bundle:nil];
[self.view addSubview:self.messageViewController.view];

ビュー コントローラが nib から作成した UIView を別のビュー コントローラのビューに追加するにはどうすればよいですか? 追加する前にそのようなビューを強制的にロードするにはどうすればよいですか?

4

3 に答える 3

3

Container View Controller を作成する必要があります。iOS 5 はコンテナー コントローラーを明示的にサポートしていますが、以前のバージョンではコンテナー コントローラーを作成できます。iOS 5 が行うことは、回転/外観イベントの自動転送を行い (オプションです... 個人的には、準備が整う前にイベントを送信するのが煩わしいと思います)、実装で使用する追加のメソッドを提供するだけです。Container View Controller を作成する際の実際の問題は、すべての適切なイベントをサブコントローラーに送信し、Apple の実装と一致する方法でコントローラーを管理することです。そうしないと、サブコントローラーで奇妙な動作が発生します。これを行う前に、View Controller が全体としてどのように機能するかを完全に理解していることを確認する必要があります。以下を読むことをお勧めします。

情報へのリンクは次のとおりです: http://developer.apple.com/library/ios/#documentation/uikit/reference/UIViewController_Class/Reference/Reference.html - 下にスクロール: Container View Controller の実装

また、View Controller のライフ サイクルについては、どの呼び出しをどの順序で行う必要があるかを理解するのに役立ちます。 //apple_ref/doc/uid/TP40007457-CH10-SW1

ビューコントローラープログラミングガイド全体を読むことをお勧めします....そこから多くの情報を得ることができます:http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/Introduction/Introduction.html#/ /apple_ref/doc/uid/TP40007457-CH1-SW1

于 2012-04-16T20:34:33.573 に答える
2

一般的には、そうしないでください。UIViewControllers がどのように使用されるかについてのいくつかの仮定を破っています。将来的に問題が発生する可能性があります。サブビューのコントローラーが、予想されるすべての UIViewController ライフサイクル メソッド呼び出しを受け取ることを当てにすることはできません。

有効な解決策は、iOS 5 コンテナー ビュー コントローラー メソッドを使用して、サブビューのコントローラーを子ビュー コントローラーとして追加するか、その動作をカプセル化する必要がある場合に、そのサブビューの管理を担当する非 UIViewController コントローラー クラスを使用することです。

于 2012-04-16T20:20:06.897 に答える
0

これを試して

- (void)viewWillAppear: (BOOL)animated {
    [super viewWillAppear: animated];
    [self.messageViewController viewWillAppear];
}

- (void)viewDidAppear: (BOOL)animated {
    [super viewDidAppear: animated];
    [self.messageViewController viewDidAppear];
}
于 2012-04-16T20:21:35.843 に答える