2017-11-11 87 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

相关问题