【发布时间】:2014-08-19 14:41:21
【问题描述】:
我正在尝试使用 Interface Builder 定义一系列容器视图控制器(可能是我的第一个错误)。在情节提要中,我创建了顶视图控制器,添加了 3 个容器视图,它们会自动将每个子视图控制器添加到情节提要中。我为每个容器视图添加了一个出口,并且能够通过隐藏/显示容器视图成功地操纵子视图。代码真的不多说了,就是:
-(IBAction) button1Pushed:(id)sender
{
containerView2.hidden = true;
containerView1.hidden = false;
}
虽然可行,但我需要更新每次放映的内容。 viewWillAppear(和相关函数)仅在初始创建时触发子视图控制器,而不是在隐藏/显示容器时触发。我想我可以添加如下内容:
[childVC1 updateContent];
containerView1.hidden = false;
但我希望我可以依赖 viewWillAppear(和相关功能)。我尝试了一些成功的事情,但有几个问题:
- 我了解 Apple 编程指南中手动创建容器的示例:
[self addChildViewController:content]; // 1 [self.view addSubview:self.currentClientView]; [content didMoveToParentViewController:self]; // 3
但这在使用 IB 时如何应用?该编程指南中没有提到IB。 IB 必须调用 addChildViewController,因为我可以使用 [self childViewControllers] 找到所有容器 VC。但是由于 viewWillAppear 只在创建时发生,这是否意味着 IB 没有继续添加视图?
所以问题1是:通过Interface Builder添加容器视图时,IB处理了多少示例代码,我需要实现多少?
- 作为实验,我在父级的viewDidLoad中添加了这段代码:
for ( UIViewController *vc in [self childViewControllers]) { [self.view addSubview:vc.view]; [vc didMoveToParentViewController:self]; }
这导致每个子视图都同时出现在屏幕左上角。它不再尊重 IB 布局,毫不奇怪,也不再尊重显示/隐藏 containerView。我可以控制它们
vc.view.hidden = true;
但它们已移动到某个默认位置。我可以手动重置它们的坐标,但首先使用 IB 的原因之一是避免通过代码进行屏幕定位。
问题 #2 是:在 IB 中添加容器视图时,我应该如何在仍然尊重 IB 布局的同时管理显示子项?通过操纵容器视图的出口?通过操作子视图控制器(通过 [self childViewControllers] 找到)?还是别的什么?
归根结底,我想要的状态是:
- 在 IB 中为父级和子级定义屏幕布局和位置
- 根据用户选择的按钮隐藏/显示子项
- viewWillAppear 在每次显示孩子时触发,允许我更新内容
感谢任何有关达到此状态的建议,谢谢!
【问题讨论】:
标签: ios objective-c ios7 uiview uiviewcontroller