以编程方式进行的Segue在viewDidLoad中不起作用

时间:2016-11-03 22:06:41

标签: ios iphone swift segue

我一直试图通过以下方式以编程方式执行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传递。

1 个答案:

答案 0 :(得分:0)

作为 dan'S 评论,你无法在ViewDidLoad中执行segue在viewDidAppears中执行。?

注意:将您的ViewDidLoad中的segue执行到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在视图加载后自动执行,您可以从下面的代码中为您的segue设置一些延迟。

     let delayInSeconds = 4.0
     override func viewDidLoad() {
     super.viewDidLoad()

     DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + delayInSeconds) {

    segueToSecondVC()

  }

  }

希望这有助于您解决问题....