2013-05-02 63 views
0

我想將UIViewController類作爲子視圖添加到現有類,所以我使用了下面的代碼。在UIView中添加UIViewController給予麻煩

myEventsView = [[EventNameViewController alloc]initWithNibName:@"EventNameViewController" bundle:nil]; 
[myEventsView.view setFrame:CGRectMake(0, 39, 320, 400)]; 
[self.view addSubview:myEventsView.view]; 

它成功添加,但問題是與按鈕動作,那些具有導航到其他視圖控制器動作不工作。這些行動方法被稱爲,但行動沒有執行,不明白爲什麼如此,請爲上述指導。

在此先感謝。

+0

EventNameViewController是UINavigationController的子類嗎? – 2013-05-02 08:02:07

+0

@Ishank EventNameViewController是一個UIViewController類。 – 2013-05-02 08:45:40

回答

2

嘗試

myEventsView = [[EventNameViewController alloc]initWithNibName:@"EventNameViewController" bundle:nil]; 
[myEventsView.view setFrame:CGRectMake(0, 39, 320, 400)]; 
[myEventsView willMoveToParentViewController:self]; 
[self.view addSubview:myEventsView.view]; 
[self addChildViewController:myEventsView]; 
[myEventsView didMoveToParentViewController:self]; 
+0

謝謝,你能解釋一下你在這裏做了什麼,它的工作原理。 – 2013-05-02 08:47:41

+0

@iPhone這個想法很簡單,當你將一個viewController添加到一個viewController時,你需要將它添加爲一個childViewController,以便childViewController能夠正確初始化。更多閱讀[自定義容器視圖控制器](http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/CreatingCustomContainerViewControllers/CreatingCustomContainerViewControllers.html) – Anupdas 2013-05-02 09:13:49

0

docs

創建負責管理在一個單一的視圖層次的任何觀點每個自定義視圖控制器對象。

你想要做的是添加一個viewcontroller的視圖作爲另一個viewcontroller視圖的子視圖,因此混合兩個視圖層次結構。這會導致你遇到問題,因爲你已經經歷過。看看Carbon Emitter的Abusing UIViewCtrollers文章,它給出了一個徹底的解釋和替代方案。

更新

如上正確答案提示,存在一種方法,使一個UIViewController中充當另一個容器。從Implementing a Container View Controller(UIViewController類參考):

自定義UIViewController子類也可以作爲一個容器視圖控制器。容器視圖控制器管理其擁有的其他視圖控制器(也稱爲其子視圖控制器)的內容的呈現。孩子的視圖可以按原樣或與容器視圖控制器擁有的視圖一起呈現。

然而,這是一款iOS> = 5的功能,所以我的答案仍然正確運行應用程序的iOS版本< 5.

-1

Muncken是正確的。您不能將myEventsView.view作爲子視圖添加到self.view,因爲myEventsView.view由其自己的視圖控制器控制。
你可能想要做的只是添加一個新的視圖(即而不是由另一個視圖控制器控制)作爲子視圖self.view。那麼,爲什麼不在沒有新的視圖控制器的情況下實例化這樣的視圖呢?

+0

請降低我的答案的人請說出原因? – 2013-05-02 09:30:25