在 Swift 4 中在视图控制器之间传递数据
Passing Data Between View Controllers in Swift 4
我在主 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
}
}
现在,我的问题是 func prepare(for segue: UIStoryboardSegue, sender: Any?)
不是 运行,我意识到这是因为它不是覆盖函数(我认为),但如果我有覆盖函数我只能看到你可以从一个传递数据?所以第二个 IBAction(按钮 1)将不起作用,因为转到 ViewController
的后退按钮的 Override Func 在它打算转到 IPcontroller
时也会运行,有什么想法吗?
您的问题是您的 prepare
方法从不 运行 因为您从不调用它们。
看,当您调用 performSegue
时,也会调用 prepare(for segue: sender:)
,因此您可以在 ViewController 中覆盖此方法,因为您正在传递 identifier
作为 performSegue
方法的参数,您可以确定如果 segue 具有 this 或 this identifier
[=22= 会发生什么]
因此,从 IBActions
中删除 prepare for 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)
}
}
而是重写 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
}
}
我在主 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
}
}
现在,我的问题是 func prepare(for segue: UIStoryboardSegue, sender: Any?)
不是 运行,我意识到这是因为它不是覆盖函数(我认为),但如果我有覆盖函数我只能看到你可以从一个传递数据?所以第二个 IBAction(按钮 1)将不起作用,因为转到 ViewController
的后退按钮的 Override Func 在它打算转到 IPcontroller
时也会运行,有什么想法吗?
您的问题是您的 prepare
方法从不 运行 因为您从不调用它们。
看,当您调用 performSegue
时,也会调用 prepare(for segue: sender:)
,因此您可以在 ViewController 中覆盖此方法,因为您正在传递 identifier
作为 performSegue
方法的参数,您可以确定如果 segue 具有 this 或 this identifier
[=22= 会发生什么]
因此,从 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)
}
}
而是重写 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
}
}