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

Posted

技术标签:

【中文标题】从子视图控制器返回到容器【英文标题】:Return from Child View Controller to Container 【发布时间】:2013-01-16 16:02:53 【问题描述】:

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

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 的关系?

【问题讨论】:

addChildViewController 本身不足以显示子视图控制器——您应该发布您使用的实际代码。导航按钮在哪里?它们在容器控制器的视图中吗?当您在屏幕上显示其中一个孩子的视图时,它们是否仍然可见? @rdelmar 我已编辑帖子 【参考方案1】:

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

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

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

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

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

【讨论】:

我不喜欢这两个的设计...我想在屏幕上自定义外观 代码不起作用。代码说没有 removeChild 函数。 @jacobronniegeorge,您必须将 removeChild: 方法添加到父控制器的 .h 文件中。这是我编造的一种方法,不是可可的。 “我不喜欢这两个的设计”是什么意思?设计什么? @rdelmar...我不喜欢 UI...我想要一个没有导航栏和标签的干净界面 @jacobronniegeorge,好的,所以不要使用它们。您是否通过将 removeChild: 方法声明添加到父控制器的 .h 文件中来使代码工作?【参考方案2】:

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

[child willMoveToParentViewController:nil];

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

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

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

【讨论】:

以上是关于从子视图控制器返回到容器的主要内容,如果未能解决你的问题,请参考以下文章

从子视图控制器获取容器视图的故事板标识符

从子视图控制器调用函数不起作用

如何从子视图导航到其他视图控制器?

从子视图 UIViewcontroller 到其他 UIViewController

将值从子视图页面快速传递到 Pageview 控制器

在 Cocoa,UIResponder 中将消息从子视图发送到父视图?