2017-11-11 131 views
0

我希望我的用戶在進入「id」和「password」後轉到TableViewController,但是當我們使用prepare和performsegue方法時,我們只發送一個變量。如何使用segue將兩個文本字段項傳遞給另一個ViewController

@IBAction func logIn(_ sender: Any) { 
    performSegue(withIdentifier: "emailSegue", sender: emailTextField.text) 
    performSegue(withIdentifier: "passwordSegue", sender: passwordTextField.text) 
} 


override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    let guest = segue.destination as! ExpenseTableViewController 

    guest.incoming.append(sender as! String) 
} 

正如你可以看到這裏我想執行兩種不同的塞格斯,我也創造了從視圖控制器命名爲「emailSegue」和「passwordSegue」的tableview控制器故事板2個塞格斯,但在準備功能我當我運行代碼時,它只能爲其中一個「emailSegue」做準備,它會編譯,並且可以將電子郵件附加到數組中,但不能附加密碼。

所以我想知道如何讓他們都被髮送?有沒有辦法爲2個不同的賽段做準備?無法在其他地方找到它的例子。

在此先感謝。

+0

你一次只能一次繼續。你不能同時出現兩個視圖控制器。 –

+0

你可以'繼續'到一個視圖控制器,你也可以發送數據到不同的視圖控制器在繼續之前 – julekgwa

回答

1

您只能執行一個 segue,但您可以發送多個參數。

只是傳遞一個數組而不是一個字符串:

@IBAction func logIn(_ sender: Any) { 
    performSegue(withIdentifier: "emailSegue", 
       sender: [emailTextField.text!, passwordTextField.text!]) 
} 

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if segue.identifier == "emailSegue" { 
     let guest = segue.destination as! ExpenseTableViewController 
     guest.incoming.append(contentsOf: sender as! [String]) 
    } 
} 

PS:不是被迫展開了text性能應驗證它們:

@IBAction func logIn(_ sender: Any) { 
    guard let email = emailTextField.text, !email.isEmpty, 
     let password = passwordTextField.text, !password.isEmpty else { 
     // show an alert 
     return 
    } 
    performSegue(withIdentifier: "emailSegue", sender: [email, password]) 
} 
+0

你是一個拯救生命的人!謝謝。 – emrepun

0

您可以一次只執行一個SEGUE,所以當你希望發生的事情,並設置在prepareForSegue兩個變量爲目標視圖控制器過渡調用performSegue只有一次。最好通過檢查segue.identifier屬性來檢查應該準備哪種類型的繼續。

+0

非常感謝!我解決了我的問題,非常感謝! – emrepun

+0

很高興聽到! :) – eirikvaa

相關問題