【问题标题】:Swift 4 push viewController instead of presentSwift 4 推送 viewController 而不是现在
【发布时间】:2019-01-22 08:01:29
【问题描述】:

我无法通过推送显示 ViewController。我有这个代码,它适用于现在。但我需要改变它来推动。我尝试使用 self.navigationController?.pushViewController(slideMenuController, animated: true) 但这对我不起作用。

func navToRecord() { 
    let mainViewController = kMainStoryboard.instantiateViewController(withIdentifier: "NQTPrivateOfficeViewController") as! NQTPrivateOfficeViewController
    let leftViewController = kMainStoryboard.instantiateViewController(withIdentifier: "NQTLeftViewController") as! NQTLeftViewController

    let nc = odrexNavigation(rootViewController: mainViewController)

    let slideMenuController = EVTSlideMenuController(mainViewController: nc, leftMenuViewController: leftViewController)
    slideMenuController.automaticallyAdjustsScrollViewInsets = true
    mainViewController.navigationItem.leftBarButtonItem = UIBarButtonItem(title: NSLocalizedString("Завершить", comment: "finishOdrex"), style: .plain, target: self, action: #selector(action))

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

    UIApplication.shared.keyWindow?.makeKeyAndVisible()
}

【问题讨论】:

  • self 在这种情况下必须包裹在 UINavigationController 中才能推送到导航堆栈上,但似乎不是
  • @Scriptable 那么我如何在代码中做到这一点?
  • 您需要在导航控制器中拥有这个 VC 才能设置 self.navigationController。所以let nav = UINavigationController(rootViewController: ThisViewController())

标签: swift uiviewcontroller navigation


【解决方案1】:

你可以试试

let nav = UINavigationController(rootViewController: self)
UIApplication.shared.keyWindow?.rootViewController = nav
nav.pushViewController(slideMenuController, animated: true)

顺便说一句,不要指望这条线

self.navigationController?.pushViewController(slideMenuController, animated: true) 

如果您在其中执行它的 VC 未包装在 navigationController 中,则可以正常工作,因为 self.navigationController? 将是 nil

【讨论】:

    【解决方案2】:

    推送转换用于将视图控制器推送到导航控制器的堆栈上。如果您从中运行该代码的视图控制器不在导航堆栈上,则 self.navigationController 将为 nil,因此可选的链接调用 self.navigationController?.pushViewController() 将失败并且该行将被忽略。

    您需要重构故事板,以便将视图控制器嵌入到导航控制器中。 (我记得界面构建器中有一个“嵌入>导航控制器”菜单项,它将更改您的故事板,以便选定的视图控制器是导航控制器的根视图控制器。)

    【讨论】:

      【解决方案3】:

      self.nc.pushViewController(slideMenuController, Animation: true)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-05-11
        • 2015-04-04
        • 1970-01-01
        • 2018-11-28
        • 2023-03-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多