关闭 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 在 viewWillAppear 函数中被调用,而不是 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 不起作用并出现警告消息
2 ViewControllers 以模态方式呈现 UITabBarController