【问题标题】:Dismissing a viewController resets presenting navigationController关闭 viewController 会重置呈现的 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 因此正在重置它。谢谢

标签: ios swift uinavigationcontroller presentviewcontroller


【解决方案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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-14
    • 1970-01-01
    • 1970-01-01
    • 2013-02-06
    • 2019-11-15
    • 1970-01-01
    • 2016-06-02
    相关资源
    最近更新 更多