如何使用segue

时间:2017-11-11 18:42:10

标签: swift segue uistoryboardsegue

我希望我的用户在输入他们的" id"之后转到TableViewController。和#34;密码"但是当我们使用prepare和performsegue方法时,我们只发送一个变量。

@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)
}

正如你在这里看到的,我想要执行两个不同的segue,我还在故事板上创建了两个segue,从ViewController到tableview控制器,名为" emailSegue"和" passwordSegue",但在准备功能中,我只能为其中一个做准备,即" emailSegue"当我运行代码时,它会编译,我可以将电子邮件附加到数组而不是我的密码。

所以我想知道如何才能让他们两人被送去?有没有办法准备2个不同的segue?无法在其他任何地方找到它的例子。

提前致谢。

2 个答案:

答案 0 :(得分:1)

您一次只能执行一个segue,因此当您希望转换发生时只调用performSegue一次,并在prepareForSegue中为目标视图控制器设置两个变量。最好通过检查segue.identifier属性来检查应该准备哪种类型的segue。

答案 1 :(得分: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])
}