正在跳过performSegueWithIdentifier * SWIFT

时间:2015-02-17 22:29:26

标签: ios xcode swift segue

我有一个UITableViewController,我希望人们可以访问它作为主页面。我有一个登录视图控制器,但我不希望这是我的初始视图控制器。我有一个if语句检查用户是否已经登录过。如果没有,我想对登录视图控制器执行segue。然而,当我运行应用程序时,它会通过if语句,识别出用户是== nil,然后继续执行performSegueWithIdentifier操作。

override func viewDidLoad() {
        super.viewDidLoad()

        if user == nil {

            self.performSegueWithIdentifier("LoginSegue", sender: self)

        }
}

知道为什么吗?

4 个答案:

答案 0 :(得分:6)

您应该将代码移到viewWillAppearviewDidAppear方法中。 然后应该正确使用。

但现在这个观点在短时间内闪烁。要消除这种闪烁,只需在viewWillApear方法中隐藏视图:

self.view.hidden = true

每次出现视图时,viewDidLoad方法都不会被调用,但只会在第一次加载时被调用。例如,如果您执行segue并返回视图,则不会再次加载,但只会再次调用viewWillAppearviewDidAppear

答案 1 :(得分:2)

对于Swift 3.0,尝试在这样的主线程上运行。

DispatchQueue.main.async {
    self.performSegue(withIdentifier: "LoginSegue", sender: self)
}

答案 2 :(得分:1)

没有更多信息,很难说。

  1. 你有一个按钮或已经建立了segue的东西,你提供了segue的标识符吗?我在viewDidLoad中进行了类似的调用,但它确实有效。

  2. 您是否已将视图控制器嵌入到UINavigationController中?如果不是,则不可能执行segue。听起来你正在使用UITableViewController,它继承自UIViewController。所以这可能是个问题。

答案 3 :(得分: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)
    })

这段代码解决了我的问题。 使用我的代码代替       self.performSegueWithIdentifier(“LoginSegue”,sender:self) 并为目标ViewController提供一个像ViewControllerClassId

的ID