从子视图控制器返回到容器

时间:2013-01-16 16:02:53

标签: iphone ios objective-c xcode

我有一个带有4个导航按钮的容器,每个按钮代表4个独立的孩子vc。我已经使用addchildviewcontroller成功实现了从容器到子vc的代码,但现在我不知道如何返回。

容器VC:4个按钮导航到4个独立的子视图控制器。

单击该按钮时,当前视图将替换为子VC的视图。因此按钮不再可见。由于这个原因,子VC有一个主页按钮,专门设计用于返回4个按钮所在的容器VC。

4个按钮中的1个示例调用显示子VC的函数:

- (IBAction)btn_bus:(id)sender {   
   [self addMyController:businessVC_];
}

添加子视图控制器,单击按钮时调用的函数:

-(void)addMyController:(UIViewController *)myController{
    [self addChildViewController:myController];
    [self.view addSubview:myController.view]; 
    [myController didMoveToParentViewController:self]; 

}

问题1:如何在子VC上捕获/执行功能。例如,如何让我的Child VC上的Home按钮现在让子vc自行移除并再次显示容器/导航屏幕?

问题2:这些程序在自定义容器VC或子VC中发生在哪里?

问题3:是否特别提供了一份指南或教程,说明如何在亲子关系中管理IBAction与IBOutlet的关系?

2 个答案:

答案 0 :(得分:3)

如果您不想要任何动画,那么返回就像这样,代码在父视图控制器中:

-(void)removeChild:(UIViewController *) child {
    [child didMoveToParentViewController:nil];
    [child.view removeFromSuperview];
    [child removeFromParentViewController];
}

在子控制器中,您可以这样称呼它:

-(IBAction) goBackToContainer {
    [(ParentClassNameHere *)self.parentViewController removeChild:self];
}

通常,应从自定义容器控制器中添加和删除子项。我不确定你的第三个问题是什么意思。 IBActions和出口属于控制器视图中包含UI项目的视图。您的整体设计与Apple使用其容器控制器的方式不同。导航和标签栏控制器等容器除了导航或标签栏视图外没有返回的视图 - 其中一个chid视图始终在屏幕上。我不知道为什么你在这种情况下做自定义控制器,因为它的设计看起来很像一个标签栏控制器。

答案 1 :(得分:2)

上一个答案中有一点错误,因为我没有足够的声誉来发表评论。第一行应该是:

[child willMoveToParentViewController:nil];

这告诉孩子它正在被删除。

在Apple Docs中查找创建自定义容器视图控制器。

UIViewController.h有很好的文档。