2012-04-16 226 views
3

這一直是我的想法,我真的不知道如何正確添加由視圖控制器管理的視圖到另一個視圖控制器的視圖。iPhone如何將視圖控制器的視圖添加到另一個視圖控制器的視圖?

這是不行的,因爲視圖不完成加載

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

我如何添加一個視圖控制器從筆尖到另一個視圖控制器的視圖中創建一個UIView?如何在添加之前強制加載此視圖?

+0

什麼方法你打電話的嗎? viewDidLoad或init?如果你從init調用,self.view還沒有創建。 – Kekoa 2012-04-16 20:31:52

回答

3

你需要創建一個容器視圖控制器。雖然iOS 5明確支持容器控制器,但您可以在以前的版本中創建容器控制器。所有的iOS 5都會做一些自動轉發輪換/外觀事件(可選...和我個人覺得它們很煩人,在我準備好之前發送事件),並給你一些額外的方法用於你的實現。創建Container View Controller的真正問題是將所有適當的事件發送到子控制器,並確保您以與Apple實施一致的方式管理您的控制器。否則,你會在你的子控制器中出現奇怪的行爲。你確實需要確保你完全理解視圖控制器是如何工作的。我建議您閱讀以下內容:

這裏有一些鏈接信息:http://developer.apple.com/library/ios/#documentation/uikit/reference/UIViewController_Class/Reference/Reference.html -Scroll下來:這裏還爲視圖控制器生命週期中實現一個容器視圖控制器

,這將幫助你找出哪些調用需要在作出何種順序:http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/ViewLoadingandUnloading/ViewLoadingandUnloading.html#//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

2

一般來說,不要這樣做。你打破了關於如何使用UIViewControllers的一些假設,並且很可能會在未來導致你的問題。你不能指望子視圖的控制器接收你可能期望的所有UIViewController生命週期方法調用。

有效的解決方案是使用iOS 5容器視圖控制器方法將子視圖的控制器添加爲子視圖控制器,或者如果您需要封裝該行爲,則擁有負責管理該子視圖的非UIViewController控制器類。

+0

我很好奇,你能指點我什麼假設? – Kekoa 2012-04-16 20:34:19

+0

@Kekoa當然,我試圖在這裏覆蓋; http://blog.carbonfive.com/2011/03/09/abusing-uiviewcontrollers在iOS 5子視圖控制器支持之前,所以它不會討論這種替代方法,但除非您使用這些方法,否則我討論的所有內容仍然適用。 – Jonah 2012-04-16 21:20:08

0

試試這個

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

- (void)viewDidAppear: (BOOL)animated { 
    [super viewDidAppear: animated]; 
    [self.messageViewController viewDidAppear]; 
} 
相關問題