【问题标题】:poptorootviewcontroller and dismiss to mainViewControllerpoptorootviewcontroller 并关闭到 mainViewController
【发布时间】:2015-04-01 12:40:12
【问题描述】:

我是 IOS 新手。 我的问题是,我有一些视图控制器,如 NavigationController、mainVC、VC1、VC2、VC3、CameraVC。在 cameraVC 中,我有一个 done 按钮,具有 doneClicked 动作。所有这些 View-Controller 都被推送到 NavigationController 中。 VC1 出现,未推送到导航控制器中。 doneClicked 函数实现了poptorootviewcontroller。当我点击完成按钮时,它让我进入 VC1 但不是 mainVC。有什么办法可以让我将所有视图控制器弹出到 VC1,然后自动将 VC1 关闭到 mainVC。

【问题讨论】:

  • 将视图控制器添加到堆栈,并弹出到第零个索引

标签: ios xcode


【解决方案1】:

将您的 MainVC 设为根视图控制器,并在完成按钮的 IBAction 中使用代码弹出到 MainVC。

[self.navigationController popToRootViewControllerAnimated:YES];

希望对你有帮助。

【讨论】:

  • 感谢彼得的回复。实际上,我的 mainVC 已添加到 TabBarController 中,因此我无法将 mainVC 作为根视图控制器。有什么方法可以让协议/委托执行某些操作以及关闭视图控制器。
  • 可以参考this
【解决方案2】:

弹出视图控制器

[self.navigationController popToRootViewControllerAnimated:YES];

并关闭呈现的视图控制器

[self dismissViewControllerAnimated:NO completion:nil]

【讨论】:

    【解决方案3】:
    [self.navigationController setViewControllers:@[mainVC]];
    

    我认为此代码适用于您的情况。 iOS 开发者库:

    将当前由导航控制器管理的视图控制器替换为指定的项目。

    - (void)setViewControllers:(NSArray *)viewControllers
                  animated:(BOOL)animated
    

    source

    您必须在关闭当前视图控制器后执行此操作。使用委托

    现在让我们假设您的导航堆栈是空的,而您的根目录是 mainVC。你想展示 VC1 没关系,只要展示它。但是你应该给 mainVC 一个代表来了解在解雇 VC1 后会发生什么。例如,您从 mainVC 呈现 VC1。并且您想在解雇 VC1 后推送 VC2。没关系,只是在 mainVC 中有一个委托,所以在这个方法中

    [self.navigationController pushViewController:VC2];
    

    当前视图不会影响您的导航堆栈。它不在你的堆栈中。所以每次你从一个控制器中解散它时,你应该给那个控制器一个代表解散后会发生什么。

    试试看。 希望能帮助到你。

    【讨论】:

    • 我在第 4 级时如何使用委托。我先推 1vc,然后推 2,然后推 3,然后推 4。 .从第 4 级开始,有什么方法可以实现协议。
    • 是的,有办法,但我应该知道你的导航地图是怎样的。让我编辑我的答案来解释一个场景。我将展示一个小例子。
    • @Zeebok,我认为您可以使用委托来实现它。我使用 Notification 来 popToRootVC 和 Dismiss ,效果很好。
    猜你喜欢
    • 2013-09-05
    • 1970-01-01
    • 2019-05-11
    • 2013-07-20
    • 2013-03-31
    • 2020-11-10
    • 2020-10-13
    • 2020-05-01
    • 1970-01-01
    相关资源
    最近更新 更多