从子视图控制器返回到容器
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 有一个非常好的文档。
【讨论】:
以上是关于从子视图控制器返回到容器的主要内容,如果未能解决你的问题,请参考以下文章