【问题标题】:Modal Presentation Forcing Navigation Controller to Pop to Root强制导航控制器弹出到根目录的模态表示
【发布时间】:2015-06-25 21:53:34
【问题描述】:

我遇到了一个奇怪的问题,我似乎找不到原因。

当试图在导航控制器上显示模态视图控制器时,当模态消失时,导航控制器会弹出我下面的所有视图控制器。

所以在推了几个视图控制器并在 topViewController 上呈现了一个模态之后,当模态被解除时,我最终回到了 rootViewController。

最近有人遇到过这种情况,我似乎找不到发生这种情况的原因?

【问题讨论】:

  • 如何呈现/关闭模态视图控制器?
  • navigationController 的 topViewController 中常用的 [self presentViewController] 和模态中的 [self dismissViewController]
  • 它很连线,你能添加你的代码吗,因为我认为应该有其他原因导致这个问题
  • 我实际上遇到了同样的问题。我已经将一个快速演示项目上传到 github:Demo Project 我创建子控制器的原因是为了方便自动布局约束。加载项目后,我需要能够换出不同的视图控制器。我在两周前向苹果报告了这个错误,但仍然没有收到回复:/
  • @Jangles 你解决了这个问题吗?我似乎有同样的事情发生。

标签: ios objective-c uinavigationcontroller


【解决方案1】:

此答案适用于@rshev:

这实际上是一个用户错误。这就是发生的事情:我有一个视图控制器,上面有一个手动添加的 navigationController(作为子视图/子 VC)。然后,导航控制器的堆栈中有 3 个 VC。第三个(可见的)VC 展示了一个图像选择器控制器。当图像选择器被关闭时,我暂时看到了我的第三个 VC,然后它迅速弹回第一个,从内存中丢弃了另外两个 VC。

所以出了什么问题?我没有意识到viewDidAppear(和viewWillAppear)正在我的内容视图控制器(带有导航控制器的子视图)上被调用。此内容 VC 实际上是在 viewDidAppear 上设置其导航控制器(并将其添加为子视图),从而覆盖了原始导航控制器。

为了解决这个问题,我只是添加了一个静态布尔值来确定第一个 VC FIRST 何时出现,如下所示:

- (void) viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];

    static BOOL firstAppearance = YES;

    if (firstAppearance)
    {
        firstAppearance = NO;

        UINavigationController *navController = [self.storyboard instantiateViewControllerWithIdentifier:@"NavigationController"];
        [navController.view setFrame:self.view.bounds];

        [self.view addSubview:navController.view];

        [self addChildViewController:navController];

        [navController didMoveToParentViewController:self];
    }
}

希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 2018-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-20
    • 2013-08-20
    • 1970-01-01
    • 2019-12-25
    相关资源
    最近更新 更多