Segue在viewDidLoad中不能编程



我一直在尝试通过以下方式以编程方式执行segue:

import UIKit
class ViewController: UIViewController {
    @IBOutlet weak var btnRedirect: UIButton!
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        self.performSegueWithIdentifier("segueToSecond", sender: btnRedirect)
    }
    @IBAction func redirect(sender: AnyObject) {
         self.performSegueWithIdentifier("segueToSecond", sender: self)
    }
}

问题是,通过单击按钮来执行segue,虽然当我尝试以编程方式执行它时,你可以在viewDidLoad方法中看到,它不起作用!

我已经尝试将sender作为nil传递。

作为dan的注释,你不能在ViewDidLoad中执行segue在viewdidappear中执行segue。

注意:移动执行segue从你的ViewDidLoad到viewDidAppers或在你的按钮动作中,如下面的代码,并确保你在storyBoard中设置segue标识符为"segueToSecond"。未测试的代码。所以,让我知道。如果您在执行时遇到任何问题

更新:

注意:如果你想让你的segue在视图加载后自动执行。你应该把segue从VC连接到VC。

      @IBAction func redirect(sender: AnyObject) {
     segueToSecondVC()
}

      func segueToSecondVC() {
      self.performSegue(withIdentifier: "segueToSecond", sender: self)
  }
      override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
       if (segue.identifier == "segueToSecond") {
       let dest = segue.destination as! viewTwo // viewTwo is your destination ViewController
       print("Segue Performed")
   }
  }

更新:

注意:如果你想让segue在视图加载后自动执行,你可以从下面的代码中设置一些延迟。

     let delayInSeconds = 4.0
     override func viewDidLoad() {
     super.viewDidLoad()
     DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + delayInSeconds) {
    segueToSecondVC()
  }
  }

希望这能帮助您解决问题....

最新更新