2015-04-17 121 views
11

我想創建一個使用UIContainerViews託管UIViewControllers的動態視圖流程。 UIContainerViews(或UIViewControllers)需要以編程方式添加到UIView以允許多個並排。我可以以編程方式創建UIContainerView嗎?

我一直在環顧四周,但無法找到任何可用於創建我的UIContainerView的構造函數。

是否有一個簡單的方法來做到這一點,或者是否違背了創建可重用視圖的正常指導原則?

綜上所述,我要實現的是這樣的:

var containerView = UIContainerView() 
containerView.add(myViewController) 
+0

您可以將其他ViewControllers的視圖添加到「ContainerView」並以編程方式控制視圖。 – Eendje

+0

@JacobsonTalom我考慮過這個問題,但我想知道是否會有任何退縮。例如,如果我在UIViewController「添加」後對其執行了任何操作,如果UIViewController實際上並未添加到視圖本身,是不是會導致一些不一致或問題? – Chackle

+1

好吧,就像Simon McLoughlin在他的回答中說的:你還應該添加ViewControllers作爲孩子等(見他的答案)。如果你想要一個快速的例子,我可以爲你發佈一個例子。 – Eendje

回答

17

一個UIContainerView只是一種直觀的方式來添加一個的viewController作爲另一個孩子並設置其邊界。

您可以通過將第二個viewController作爲第一個viewController的子節點進行編程,將第二個視圖放在第一個視圖的某個位置。

類似這樣;

childVC = [[SomeViewController alloc] init]; 

[self addChildViewController:childVC]; 

[self.view addSubview:childVC.view]; 

[childVC didMoveToParentViewController:self]; 
+1

如果在childViewController引用上執行任何操作,它是否會正確處理它們?例如,一個presentViewController方法,儘管它沒有物理參與UI的一部分,因爲只添加了.view屬性? – Chackle

+5

@Chackle所有的交互都將由'SomeViewController'內部的邏輯處理。它的功能就好像兩個viewController同時在屏幕上一樣,彼此獨立。如果用戶在父級上滾動滾動視圖,則會通知父級,如果用戶在子級上滾動滾動視圖,則會通知childVC。唯一的區別是父母必須管理childVC的生命週期 –

+0

感謝您的解釋。很有幫助! – Chackle

相關問題