Swift 4推viewController而不是现在

时间:2018-08-15 12:32:00

标签: swift uiviewcontroller navigation

我无法通过推送显示ViewController。我有此代码,目前可以正常工作。但是我需要更改它才能推动。我尝试使用 self.navigationController?.pushViewController(slideMenuController,animation: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()
}

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

self.nc.pushViewController(slideMenuController,动画:true)