performSegueWithIdentifier不会立即执行

时间:2016-06-07 16:05:17

标签: ios swift

我必须验证某些内容才能决定是继续执行viewDidload()句子还是执行segue,但是当我调试代码时,在performSegueWithIdentifier调用之后执行即将发生的句子并且用户可以看到当前ViewController的一些UI,我想在ViewController中进行验证,而不是在它的父节点中进行验证。

以下是我的一些代码:

override func viewDidLoad() {
    super.viewDidLoad()
    let questionD = self.question![DECRIPTION]
    let type = self.question![TYPE] as? String;
    if type == "60" {
        performSegueWithIdentifier("showCameraSegue", sender: self)
    }
    setBackBtn()

    self.lblResponse.text = questionD as? String;

    lblResponse.backgroundColor = UIColor.whiteColor()
...
}

1 个答案:

答案 0 :(得分:1)

你可以在延迟半秒后执行代码行,这样新的视图控制器就会在代码执行之前显示出来。

你可能想尝试在某个地方实现这个......

func runAfterDelay(delay: NSTimeInterval, block: dispatch_block_t) {
    let time = dispatch_time(DISPATCH_TIME_NOW, Int64(delay * Double(NSEC_PER_SEC)))
    dispatch_after(time, dispatch_get_main_queue(), block)
}

然后这样称呼它:

runAfterDelay(delay: 0.5, {

    setBackBtn()

    self.lblResponse.text = questionD as? String;

    lblResponse.backgroundColor = UIColor.whiteColor()
    ...
})

这不会像你要求的那样立即运行segue ......但是在你的segue之后它会让其他所有东西都运行

或者如果您使用导航控制器,则可以在知道新视图控制器呈现时执行代码:

class MyViewControllerSubclass : UIViewController, UINavigationControllerDelegate {

func viewDidLoad() {
    self.navigationController.delegate = self
}

func navigationController(navigationController: UINavigationController, didShowViewController viewController: UIViewController, animated: Bool) {
    //put your code here
}
}