我一直在尝试通过以下方式以编程方式执行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()
}
}
希望这能帮助您解决问题....