2013-01-16 38 views
1

我有一個容器有4個導航按鈕,每個代表4個單獨的子vc。我已經成功實現了使用addchildviewcontroller從容器到子vc的代碼,但是現在我不知道該怎麼回去。從子視圖控制器返回到容器

容器VC:4按鈕導航到4個獨立的子視圖控制器。

當按鈕被點擊時,當前視圖被替換爲子VC的視圖。因此按鈕不再可見。由於這個原因,孩子VC有一個主頁按鈕,專門用來返回4個按鈕所在的容器VC。當點擊

- (IBAction)btn_bus:(id)sender { 
    [self addMyController:businessVC_]; 
} 

添加子視圖控制器,功能調用鍵::1 4的按鈕調用一個函數來顯示子VC

-(void)addMyController:(UIViewController *)myController{ 
    [self addChildViewController:myController]; 
    [self.view addSubview:myController.view]; 
    [myController didMoveToParentViewController:self]; 

}

問題1:你如何在小孩VC上捕捉/執行功能。例如,如何獲取我的Child VC上的Home按鈕,現在可以使子vc自行刪除,並再次顯示容器/導航屏幕?

問題2:這些程序在自定義容器VC或子VC中發生在哪裏?

問題3:是否有特別指導或教程,說明如何在親子關係中管理IBAction和IBOutlet的關係?

+0

addChildViewController本身不足以顯示子視圖控制器 - 您應該發佈您使用的實際代碼。導航按鈕在哪裏?他們是否在容器控制器的視圖中?當你在屏幕上顯示一個孩子的視圖時,他們仍然可見嗎? – rdelmar

+0

@rdelmar我編輯過的文章 – jacobronniegeorge

回答

3

如果你不希望任何動畫,回去像這樣做,與父視圖控制器的代碼是:

-(void)removeChild:(UIViewController *) child { 
    [child didMoveToParentViewController:nil]; 
    [child.view removeFromSuperview]; 
    [child removeFromParentViewController]; 
} 

在子控制器,你可以這樣調用它:

-(IBAction) goBackToContainer { 
    [(ParentClassNameHere *)self.parentViewController removeChild:self]; 
} 

一般來說,應該從自定義容器控制器添加和移除子元素。我不確定你的第三個問題是什麼意思。 IBActions和網點屬於哪個控制器的視圖都包含UI項目。您的整體設計與Apple的容器控制器不同。像導航和標籤欄控制器的容器除了導航欄或標籤欄視圖之外沒有可返回的視圖 - 其中一個chid視圖始終顯示在屏幕上。在這種情況下,我不知道你爲什麼要做自定義控制器,因爲它的設計看起來非常像標籤欄控制器。

+0

我不喜歡這兩種設計......我想在屏幕上自定義外觀 – jacobronniegeorge

+0

代碼無法正常工作。該代碼表示​​沒有removeChild函數。 – jacobronniegeorge

+0

@jacobronniegeorge,您必須將removeChild:方法添加到父控制器的.h文件。這是我製作的一種方法,不是可可一種。 「我不喜歡這兩種設計」是什麼意思?什麼設計? – rdelmar

2

以前的答案有一個小錯誤,因爲我沒有足夠的聲望留下評論。第一行應該是:

[child willMoveToParentViewController:nil];

這說明它是被刪除的子項。

在Apple Docs中查找創建自定義容器視圖控制器。

和UIViewController.h有非常好的文檔。

相關問題