我一直试图通过以下方式以编程方式执行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
传递。
答案 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()
}
}
希望这有助于您解决问题....