[英]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?)
沒有運行,我意識到這是因為它不是Override Func(我認為),但如果我有覆蓋功能而不是我只能看到你可以從一個傳遞數據? 因此,第二個IBAction(按鈕1)將無法工作,因為返回到ViewController
的后退按鈕的覆蓋功能也會在它意圖轉到IPcontroller
,任何想法?
您的問題是您的prepare
方法永遠不會運行,因為您從未調用它們。
看,當你調用performSegue
,那么也會調用prepare(for segue: sender:)
,所以你可以在ViewController中覆蓋這個方法,因為你將identifier
作為performSegue
方法的參數傳遞,你可以確定如果segue有什么應該發生這個或這個 identifier
因此,從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)
}
}
而是覆蓋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.