【问题标题】:presentViewController has no navigationController swiftpresentViewController 没有 navigationController swift
【发布时间】:2017-03-16 00:05:47
【问题描述】:

我过渡到下一个视图是这样的:

if let navigationController = navigationController {
        if let storyboard:UIStoryboard = UIStoryboard(name: "myStoryboard", bundle: nil) {

            if let vc = storyboard.instantiateViewControllerWithIdentifier("myViewController") as? MyViewController {
                dispatch_async(dispatch_get_main_queue()) {
                    navigationController.presentViewController(vc, animated: true, completion: nil)
                }
            }
        }
    }

这很好用。我想要这样的过渡。但是当我在 MyViewController 中调用以下代码时,NavigationController 为 nil:

if let navigationController = navigationController {
       print("yeah i have a nc")
    } else {
         print("its nil") //this will call
    }

当我使用navigationController.pushViewController(vc, animated: true) 时,一切正常。但我真的很想过渡。这是我这边的错误实现还是presentViewController 总是没有导航控制器?如果是,我该怎么办?

我的控制器 A 已经嵌入到导航控制器中。我使用 navigationController.presentViewController 去 MyViewController。我想从 MyViewController 推送到下一个 ViewController C。

【问题讨论】:

  • 你想展示一个与navigationController连接的viewController吗?那么,展示后,你可以push和pop……是这样的吗?
  • 是的,就是这样。我的控制器 A 已经嵌入到导航控制器中。我使用 navigationController.presentViewController 来获取 MyViewController。我想从 MyViewController 推送到下一个 ViewController
  • 所以,我假设如果您尝试从呈现的控制器导航到另一个 viewController,它将呈现而不是推送,对吗?
  • “它将呈现而不是推送”是什么意思?当我使用推送时,一切都很好。我的下一个 VC 中有一个 navigationController。当我使用 presentViewController 时,我没有。
  • 对不起,我改了

标签: swift navigationcontroller presentviewcontroller


【解决方案1】:

对我有用的解决方案

我不知道为什么,但是当您使用 presentViewController 时,您必须为您的 navigationController 定义一个新的(?)根。

在这种情况下,我理解 Ahmad Fs 的回答。

if let storyboard:UIStoryboard = UIStoryboard(name: "myStoryboard", bundle: nil) {
        if let vc = storyboard.instantiateViewControllerWithIdentifier("MyViewController") as? MyViewController {
            if let navController:UINavigationController = UINavigationController(rootViewController: vc) {
                dispatch_async(dispatch_get_main_queue()) {
                    self.presentViewController(navController, animated:true, completion: nil)
                }
            }
        }
    }

SWIFT 3

    let storyboard = UIStoryboard(name: UIConstants.Storyboards.registration, bundle: nil)
    if let vc = storyboard.instantiateViewController(withIdentifier: "YourViewControllerIdentifier") as? YourViewController {

        let navigationController = UINavigationController(rootViewController: vc)
        DispatchQueue.main.async {
            navigationController.present(vc, animated: true)
        }
    }

我找到了“我的”解决方案here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-21
    • 1970-01-01
    • 1970-01-01
    • 2017-05-18
    • 2017-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多