我对容器的工作原理有点困惑。我有容器:
我尝试在MainViewController
中管理这个问题。但当我控制 - 将它拖入我的.h文件时,我正在
@property (weak, nonatomic) IBOutlet UIView *liveContainer;
为什么这是一个UIView类?这意味着是自我。查看我的BaseButtonContainerView
?但我有BaseButtonContainerViewController
,在调试中我看到viewDidLoad
被调用。我可以访问BaseButtonContainerViewController
中的MainViewController
方法吗?
答案 0 :(得分:2)
故事板喜欢在prepareForSegue
中执行所有操作,因此只需为segue分配一个标识符即可。在这种情况下,我们假设您在IB中将其设置为baseButtonContainerSegue
。然后在prepareForSegue
中使用:
- (void) prepareForSegue:(UIStoryboardSegue*)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"baseButtonContainerSegue"]) {
self.liveContainer = segue.destinationViewController;
}
}
确保您拥有UIViewController
属性liveContainer
,(特别是在您的情况下,您希望拥有BaseButtonContainerViewController
属性)。我不确定为什么你必须这样做,但我猜它与内存管理有关。假设您离开该屏幕并且您的容器已取消分配。然后,当你回去时,你可能会失去与他们的联系。这样就可以再次调用segue,你可以将它们作为属性来获取。再说一遍,我不确定,所以如果其他人确实请赐教我!
答案 1 :(得分:0)
嵌入在容器视图中的控制器是MainViewController的子视图控制器,因此您可以使用self.childViewControllers访问它们。这将为您提供所有子项的数组,因此您必须使用objectAtIndex:来访问任何一个特定的控制器。容器视图只是普通的UIViews。故事板正在为您设置子视图控制器。你得到的就像你使用自定义容器控制器api在代码中自己添加孩子一样(使用addChildViewController:和didMoveToParentViewController :,然后将子视图添加到self.view或self.view的子视图)