如何在IB中使用带有XIB的UIContainerView?

时间:2014-12-09 18:25:26

标签: ios iphone xcode

在Xcode 6中,我试图在导航控制器内托管的视图控制器中添加容器视图。但是在Objects库中没有容器视图选项。我没有使用故事板只是一个普通的xib。容器视图是否仅与故事板相关。在这种情况下,我只使用正常的UIView吗?

2 个答案:

答案 0 :(得分:2)

UIContainerView嵌入子视图控制器。 Interface Builder期望显示容器视图嵌入的子视图控制器 - 这在故事板中可以正常工作,但是使用XIB是不可能的,因为它们只能显示单个视图控制器。

如果你绝对不能在你的项目中使用故事板(你真的应该,它们很棒!),你最好的选择是使用UIView作为占位符并通过代码添加子视图控制器。

这是我在UIViewController上使用的一个方便的类别,用于处理将子视图控制器添加到占位符视图的所有细节。

- (void)addContentController:(UIViewController*)viewController inView:(UIView *)inView
{
    viewController.view.translatesAutoresizingMaskIntoConstraints = NO;
    [self addChildViewController:viewController];
    [inView addSubview:viewController.view];
    NSDictionary *viewsDict = @{@"presentedView" : viewController.view};
    NSArray *constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[presentedView]|" options:0 metrics:nil views:viewsDict];
    [inView addConstraints:constraints];
    constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[presentedView]|" options:0 metrics:nil views:viewsDict];
    [inView addConstraints:constraints];
    [viewController didMoveToParentViewController:self];
}

答案 1 :(得分:0)

容器视图用于嵌入另一个视图控制器。

Xib用于单个视图/视图控制器,因此您无法嵌入另一个视图控制器。

您可以在Xib中使用占位符视图,并以编程方式添加使用addChildViewController:嵌入第二个视图控制器,并使用addSubview:添加它的视图。