在Swift中没有导航控制器的viewDidLoad()中执行segue

时间:2014-09-29 12:42:12

标签: swift uinavigationcontroller storyboard segue viewdidload

我有三个视图(视图1检查服务器连接,视图2显示主要内容,view3显示支持页面),我在故事板中创建它们而不进行编码。在启动我的iOS应用程序时,视图1在检查服务器连接时显示一个微调器。如果连接检查通过,那么我想去查看2,如果它失败,那么我想去查看3.视图1仅用于连接检查,我不想去回到这个观点。所以,我想我不需要导航控制器,或者?

在故事板中,我将所有视图与sequ​​es连接起来。在我的视图控制器1中,我这样做:

override func viewDidLoad() {
    super.viewDidLoad()

    let result:Bool = server.isServerAvailable(myURL)

    if (result == true) {
        performSegueWithIdentifier("ConnectionCheckToMain", sender: self)
    }
    else {
        performSegueWithIdentifier("ConnectionCheckToSupport", sender: self)
    }
}

viewDidLoad()函数中的这个段落并不起作用,但我不知道为什么。我在视图上添加了一个按钮来检查它。我在viewDidLoad()中实现了相同的代码,但效果很好。单击按钮时,将加载下一个视图。

有什么想法代码没有用吗?

3 个答案:

答案 0 :(得分:5)

这段代码解决了我(Swift 3)使用" segue" (请用您的segue名称替换" ConnectionCheckToMain"

DispatchQueue.main.async(execute: {
  self.performSegue(withIdentifier: "ConnectionCheckToMain", sender: nil)
  })

答案 1 :(得分:3)

您可以使用此代码进行导航。

    let vc : UIViewController = self.storyboard?.instantiateViewControllerWithIdentifier("ConnectionCheckToMain") as! UIViewController;
    self.presentViewController(vc, animated: true, completion: nil)

答案 2 :(得分:1)

我遇到了同样的问题,我用这段代码解决了这个问题:

dispatch_async(dispatch_get_main_queue(), { () -> Void in   
            let viewController:UIViewController = self.storyboard?.instantiateViewControllerWithIdentifier("ViewControllerClassId") as! ViewControllerClassName
            self.presentViewController(viewController, animated: true, completion: nil)
        })