2013-06-05 137 views
0

我對容器的工作原理有些困惑。我有容器: enter image description here獲取容器VC而不是視圖

我試着在我的MainViewController中管理這個。但是,當我控制拖動到我的.h文件我越來越

@property (weak, nonatomic) IBOutlet UIView *liveContainer; 

爲什麼這是一個UIView類?這意味着這是self.view我的BaseButtonContainerView?但我有BaseButtonContainerViewController,在調試中我看到viewDidLoad被調用。我可以從MainViewController訪問BaseButtonContainerViewController方法嗎?

回答

2

故事板喜歡在prepareForSegue中做所有事情,因此只需爲您的segue指定一個標識符即可。在這種情況下,我們假設您將其設置爲IB中的baseButtonContainerSegue。然後在prepareForSegue使用:

- (void) prepareForSegue:(UIStoryboardSegue*)segue sender:(id)sender 
{ 
    if ([segue.identifier isEqualToString:@"baseButtonContainerSegue"]) { 
     self.liveContainer = segue.destinationViewController; 
    } 
} 

只要確保你有一個UIViewController財產liveContainer,(特別是在你的情況,你會希望有一個BaseButtonContainerViewController屬性)。我不確定你爲什麼必須這樣做,但我猜測它與內存管理有關。假設你離開那個屏幕,你的容器被釋放。然後,當你回去時,你可能會失去與他們的聯繫。這樣,賽段將再次被調用,你可以將它們作爲屬性來抓取。再次,我不確定,所以如果有其他人請賜教!

0

嵌入在容器視圖中的控制器是MainViewController的子視圖控制器,因此您可以使用self.childViewControllers訪問它們。這會給你一個你所有孩子的數組,所以你必須使用objectAtIndex:來訪問任何一個特定的控制器。容器視圖只是普通的UIViews。故事板只是爲您設置子視圖控制器。你得到的結果與你使用自定義容器控制器api自己在代碼中添加孩子一樣(使用addChildViewController:和didMoveToParentViewController:,隨後將孩子的視圖添加到self.view或self.view的子視圖中) 。

相關問題