簡體   English   中英

在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?)沒有運行,我意識到這是因為它不是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM