从parentViewController隐藏或临时删除子ViewController?

时间:2013-08-26 21:21:52

标签: ios uiviewcontroller uistoryboard container-view

(询问并自我回答,因为我在Google上没有发现任何点击,但最终通过反复试验找到了解决方案)

对于iOS 5和6,Apple添加了一些丑陋的黑客,使InterfaceBuilder支持“嵌入式”视图控制器。他们没有记录这些是如何工作的,他们只提供代码级示例,而且它们仅涵盖了有限的一部分案例。

特别是,我想要一个有时隐藏的嵌入式视图控制器 - 但是如果你尝试使用明显的方法它就不起作用(你会得到一个白色矩形):

childViewController.view.hidden = TRUE;

4 个答案:

答案 0 :(得分:5)

为什么不在容器视图中创建IBOutlet并执行

self.containerView.hidden = YES;

答案 1 :(得分:3)

他们是如何做到的似乎是自iOS 2以来手动方式的变化(但它只支持视图,而不是视图控制器) - 有一个真实的,真正的UIView嵌入到父级中(未在源代码示例 - 只有在使用InterfaceBuilder时才会添加它。)。

所以,相反,如果你这样做:

childViewController.view.superview.hidden = TRUE;

......它有效!

另外,违反直觉,您可以随时从viewDidLoad调用此方法 - 在调用 viewDidLoad之前,执行执行Apple的“embed segue”黑客攻击。

所以你可以在启动时执行此操作,让你的childViewController开始不可见。

答案 2 :(得分:3)

使用此[self.childviewController setHidden:YES];

答案 3 :(得分:0)

如果有人需要隐藏/显示所有子视图或迭代它们:

func hideChildrenViews() {
    for view in self.view.subviews {
        (view as! UIView).hidden = true
    }
}

func showChildViews() {
    for view in self.view.subviews {
        (view as! UIView).hidden = false
    }
}