2015-04-17 55 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

相关问题