如何从另一个容器访问容器视图

时间:2014-06-06 07:37:53

标签: ios uiviewcontroller containers

情形: 我有一个主视图控制器,从该视图控制器我已经放置了3个按钮和3个容器视图。对于每个按钮单击我已启用适当的容器。我有家,关于我们和联系我们,从家里我需要去联系我们容器视图。

如何从主容器视图控制器启用“联系我们”容器视图?

enter image description here

欢迎更多有价值的答案,谢谢你。

3 个答案:

答案 0 :(得分:2)

您可以执行以下操作:

1)为容器视图控制器(UIViewController的子类)创建一个自定义类,并将Interface Builder中该容器视图控制器的类设置为自定义子类。

2)在自定义容器视图控制器类中实现一些API来管理其子级。也许像- (void)switchToAboutVC和类似的东西(他们应该调用performSegueWithIdentifier:sender:)。

3)在您的子视图控制器(例如about,contact us等)中,您可以访问父视图控制器并使其切换,因此它看起来像[(MyCustomContainerController*)[self parentViewController] switchToAboutVC]

PS在MVC模式中这样做很好,只需确保正确的对象正在管理VC层次结构 - 在这种情况下,这是您的自定义容器控制器。它与你使用导航控制器的方式非常相似,除了每个子视图控制器已经有一个属性来获取它的父导航控制器而不需要在视图控制器中搜索它手动层次结构。

答案 1 :(得分:0)

我的解决方案是在控制器中定义函数来操作容器视图。在每个视图中,您始终可以使用适当的参数调用viewController函数,以便修改或访问另一个视图。

例如:

在UIViewController中:

//public function !
-(void)modifyContainer1() {
   //place here code to modify container 1
}

//public function !
-(void)modifyContainer2() {
   //place here code to modify container 1
}

并在您的容器中,只需致电:

[self.viewController modifyContainer1];
//etc.

或者如果你想让容器1直接调用函数:

-(UIContainerView*)getContainer1 {
   //return self.container1
}

答案 2 :(得分:0)

这样做并不是那么好,U R打破(莫名其妙)MVC设计模式。 通过NSNotificationCenter

更好地连接容器视图
[[NSNotificationCenter defaultCenter] addObserver:<your_controller>
                                         selector:@selector(method)
                                             name:@"name_of_notification"
                                           object:<any_linear_object_u_want>];

现在发件人将发布NSNotificationCenter:

[[NSNotificationCenter defaultCenter] postNotificationName:@"name_of_notification" object:<any_linear_object_u_want>];