关闭 viewController 会重置呈现的 navigationController

Posted

技术标签:

【中文标题】关闭 viewController 会重置呈现的 navigationController【英文标题】:Dismissing a viewController resets presenting navigationController 【发布时间】:2017-03-08 20:18:23 【问题描述】:

我有一个 UINavigation 控制器。 viewController内容如下

[RestaurantViewController, MenuViewController, ProductViewController]

在 ProductViewController 我调用

self.navigationController?.present(sideViewController, animated:true, completion:nil)

这将按预期呈现视图控制器。现在,当我从 sideViewController 中调用 self.dismiss/self.presentingViewController.dismiss 时,原来的 NavigationController 会重置为

[RestaurantViewController]

这是为什么?我只想解散并返回到呈现的 viewController

【问题讨论】:

在一个干净的小项目中测试,你会发现你描述的行为不正常。因此,您正在做其他事情,导致导航控制器弹出/展开回到 RestaurantViewController。但是您还没有描述那是什么;只有你自己才能知道。 问题一定出在控制器被解散后会发生什么。您一定在某个地方调用了popToRootViewController,或者您正在使用调用此popToRootViewController的某人的库@ @matt 你是对的,我调用了一些代码,声明 viewControllers 在 vi​​ewWillAppear 函数中被调用,而不是 viewDidLoad 因此正在重置它。谢谢 【参考方案1】:

为什么不直接使用 ProductViewController 显示控制器

self.present(sideViewController, animated:true, completion:nil)

然后使用

关闭
self.dismiss(animated: true , completion: nil)

除此之外,还有很多事情可能会导致您的问题。如果你想在 sideViewController 上添加一个导航控制器,那么创建一个导航控制器并将 sideViewController 设置为 rootviewcontroller 并显示导航控制器。

let nav = UINavigationController(rootViewController: //SideViewController)
self.present(nav, animated: true, completion: nil)

【讨论】:

以上是关于关闭 viewController 会重置呈现的 navigationController的主要内容,如果未能解决你的问题,请参考以下文章

Swift:关闭 viewController 1 然后呈现 viewController 2

关闭呈现模式 ViewController

关闭呈现 viewController 不起作用并出现警告消息

2 ViewControllers 以模态方式呈现 UITabBarController

使用 Swift 呈现新的 Viewcontroller 后如何关闭以前的 Viewcontroller?

关闭一个 ViewController 并呈现另一个 ViewControlloer - IOS - Swift 3