Tay*_*les 3 viewcontroller ios swift
我在main上有一个登录页面,View Controller它传递了一个"verified"字符串EslViewController,这个,我可以开始工作了,但现在我想把它传递"verified"给IP_ModuleViewController我有问题...目前的代码是;
@IBAction func backButton(_ sender: Any) {
if installer == "verified"{
performSegue(withIdentifier: "main/login", sender: self)
}
func prepare(for segue: UIStoryboardSegue, sender: Any?){
let mainController = segue.destination as! ViewController
mainController.myvar = installer
}
}
@IBAction func button1(_ sender: Any) {
if installer == "verified"{
performSegue(withIdentifier: "Button1", sender: self)
}
func prepare(for segue: UIStoryboardSegue, sender: Any?){
let IPController = segue.destination as! IP_ModuleQuickStartViewController
IPController.verified = installer
}
}
Run Code Online (Sandbox Code Playgroud)
现在,我的问题是它func prepare(for segue: UIStoryboardSegue, sender: Any?)没有运行,我意识到这是因为它不是Override Func(我认为),但是如果我有覆盖功能而我只能看到你可以从一个传递数据?所以第二个IBAction(按钮1)将不起作用,因为后退按钮的覆盖功能ViewController也会在它意图进行时运行IPcontroller,任何想法?
您的问题是您的prepare方法永远不会运行,因为您从未调用它们.
看,当你调用时performSegue,prepare(for segue: sender:)也会调用,所以你可以在ViewController中覆盖这个方法,因为你identifier作为performSegue方法的参数传递,你可以确定如果segue有这个或这个会发生什么 identifier
所以,删除准备segue方法 IBActions
@IBAction func backButton(_ sender: Any) {
if installer == "verified"{
performSegue(withIdentifier: "main/login", sender: self)
}
}
@IBAction func button1(_ sender: Any) {
if installer == "verified"{
performSegue(withIdentifier: "Button1", sender: self)
}
}
Run Code Online (Sandbox Code Playgroud)
改为覆盖prepare(for segue: sender:)ViewController的方法,并在内部指定如果segue具有"main/login"标识符或应该发生什么"Button1":
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "main/login" {
let mainController = segue.destination as! ViewController
mainController.myvar = installer
} else if segue.identifier == "Button1"
let IPController = segue.destination as! IP_ModuleQuickStartViewController
IPController.verified = installer
}
}
Run Code Online (Sandbox Code Playgroud)