1

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

Container 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 上捕获/执行功能。例如,如何让子 VC 上的主页按钮现在导致子 vc 自行删除并再次显示容器/导航屏幕?

问题 2:这些过程在自定义容器 VC 或子 VC 中的什么位置进行?

问题 3:是否有特别的指南或教程说明如何在父子关系中管理 IBAction 和 IBOutlet 的关系?

4

2 回答 2

3

如果您不想要任何动画,则返回是这样完成的,代码位于父视图控制器中:

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

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

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

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

于 2013-01-16T17:24:10.743 回答
2

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

[child willMoveToParentViewController:nil];

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

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

并且 UIViewController.h 有一个非常好的文档。

于 2013-01-19T17:48:25.560 回答