正在跳过 performSegueWithIdentifier *SWIFT
performSegueWithIdentifier is being skipped *SWIFT
我有一个 UITableViewController,我希望人们可以将其作为主页访问。我确实有一个登录视图控制器,但我不希望它成为我的初始视图控制器。我有一个 if 语句检查用户之前是否登录过。如果没有,我想对登录视图控制器执行一个 segue。但是,当我 运行 应用程序时,它通过 if 语句,识别出用户 == nil,然后直接执行 performSegueWithIdentifier 操作。
override func viewDidLoad() {
super.viewDidLoad()
if user == nil {
self.performSegueWithIdentifier("LoginSegue", sender: self)
}
}
知道为什么吗?
您应该将代码移动到 viewWillAppear
或 viewDidAppear
方法中。
那么应该可以正常使用了。
但是现在画面闪烁了很短的时间。要消除闪烁,只需在 viewWillApear
方法中隐藏视图:
self.view.hidden = true
此外,viewDidLoad
方法不会在每次视图出现时都被调用,而只会在它第一次加载时被调用。例如,如果您执行 segue 和 return 返回视图,它不会再次加载,而只会再次调用 viewWillAppear
和 viewDidAppear
。
没有更多信息很难说。
你有没有已经建立转场的按钮或其他东西,你是否提供了转场的标识符?我在 viewDidLoad 中进行了类似的调用,它起作用了。
您是否将视图控制器嵌入到 UINavigationController 中?如果不是,则无法执行 segue。听起来您正在使用继承自 UIViewController 的 UITableViewController。所以这可能是问题所在。
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", 发件人: 自己)
并为您的目的地 ViewController 提供一个 ID,例如 ViewControllerClassId
对于Swift 3.0,尝试像这样在主线程上运行。
DispatchQueue.main.async {
self.performSegue(withIdentifier: "LoginSegue", sender: self)
}
我有一个 UITableViewController,我希望人们可以将其作为主页访问。我确实有一个登录视图控制器,但我不希望它成为我的初始视图控制器。我有一个 if 语句检查用户之前是否登录过。如果没有,我想对登录视图控制器执行一个 segue。但是,当我 运行 应用程序时,它通过 if 语句,识别出用户 == nil,然后直接执行 performSegueWithIdentifier 操作。
override func viewDidLoad() {
super.viewDidLoad()
if user == nil {
self.performSegueWithIdentifier("LoginSegue", sender: self)
}
}
知道为什么吗?
您应该将代码移动到 viewWillAppear
或 viewDidAppear
方法中。
那么应该可以正常使用了。
但是现在画面闪烁了很短的时间。要消除闪烁,只需在 viewWillApear
方法中隐藏视图:
self.view.hidden = true
此外,viewDidLoad
方法不会在每次视图出现时都被调用,而只会在它第一次加载时被调用。例如,如果您执行 segue 和 return 返回视图,它不会再次加载,而只会再次调用 viewWillAppear
和 viewDidAppear
。
没有更多信息很难说。
你有没有已经建立转场的按钮或其他东西,你是否提供了转场的标识符?我在 viewDidLoad 中进行了类似的调用,它起作用了。
您是否将视图控制器嵌入到 UINavigationController 中?如果不是,则无法执行 segue。听起来您正在使用继承自 UIViewController 的 UITableViewController。所以这可能是问题所在。
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", 发件人: 自己) 并为您的目的地 ViewController 提供一个 ID,例如 ViewControllerClassId
对于Swift 3.0,尝试像这样在主线程上运行。
DispatchQueue.main.async {
self.performSegue(withIdentifier: "LoginSegue", sender: self)
}