[英]Passing Data Between View Controllers in Swift 4
I've got a login page on the main View Controller
which passes a "verified"
string to EslViewController
, this, I can get to work, but it's now when I want to pass this "verified"
to IP_ModuleViewController
that I'm having issues with... the code at the moment is; 我在主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
}
}
Now, my problem is that the func prepare(for segue: UIStoryboardSegue, sender: Any?)
isn't running, I realize that this is because it's not an Override Func (I think), but if I have the override func instead I can only see that you can pass data from one? 现在,我的问题是func prepare(for segue: UIStoryboardSegue, sender: Any?)
没有运行,我意识到这是因为它不是Override Func(我认为),但如果我有覆盖功能而不是我只能看到你可以从一个传递数据? so the second IBAction (button 1) won't work because the Override Func for the back button which goes to ViewController
also runs when it's meant to be going to IPcontroller
, Any ideas? 因此,第二个IBAction(按钮1)将无法工作,因为返回到ViewController
的后退按钮的覆盖功能也会在它意图转到IPcontroller
,任何想法?
Your problem is that your prepare
methods never run because you never call them. 您的问题是您的prepare
方法永远不会运行,因为您从未调用它们。
Look, when you call performSegue
, then prepare(for segue: sender:)
is called too, so you can override this method in your ViewController and because you're passing identifier
as parameter of performSegue
method you can determine what should happen if segue has this or this identifier
看,当你调用performSegue
,那么也会调用prepare(for segue: sender:)
,所以你可以在ViewController中覆盖这个方法,因为你将identifier
作为performSegue
方法的参数传递,你可以确定如果segue有什么应该发生这个或这个 identifier
So, delete prepare for segue methods from IBActions
因此,从IBActions
删除准备segue方法
@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)
}
}
instead override prepare(for segue: sender:)
method of ViewController and inside specify what should happen if segue has "main/login"
indentifier or "Button1"
: 而是覆盖ViewController的prepare(for segue: sender:)
方法,并指定如果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
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.