【问题标题】: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 我已编辑帖子

标签: iphone ios objective-c xcode


【解决方案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 有一个非常好的文档。

【讨论】:

    猜你喜欢
    • 2021-10-23
    • 1970-01-01
    • 1970-01-01
    • 2013-01-08
    • 2020-02-18
    • 2015-10-15
    • 2016-12-11
    • 2017-05-26
    • 2017-02-13
    相关资源
    最近更新 更多