验证检查后使用“准备”执行Segue

时间:2019-02-27 11:45:18

标签: ios swift

我有一个表单需要执行验证,然后再执行segue并将数据发送到下一个视图控制器。现在,我只是检查是否所有文本字段都已填写:

@IBAction func startBtn(_ sender: Any) {
    if(idInput.text == "" || dob1Field.text == "" || dob2Field.text == "" || dob3Field.text == ""){
        print("no text")
    }
}

我的想法是,当按下开始按钮时,检查是否所有字段都已填充,是否使用prepare来搜索下一个VC并发送数据。

我正在努力了解如何执行此操作,我将情节提要上的开始按钮链接到了VC,并为其指定了标识符mainUse,因为它将转到mainUseController

这是准备功能:

override func prepare(for segue: UIStoryboardSegue, sender: Any?){
    if segue.identifier == "mainUse"{
        let vc = segue.destination as! mainUseController
    }
}

我努力理解的部分是一旦检查完成并成功,如何调用prepare函数。谢谢。

4 个答案:

答案 0 :(得分:0)

使用以下代码执行segue,首先检查是否满足所有条件,然后执行sese,否则相应地显示错误消息。

@IBAction func startBtn(_ sender: Any) {
        if(idInput.text == "" || dob1Field.text == "" || dob2Field.text == "" || dob3Field.text == ""){
            print("no text")
            //Show alert message here
        }else{
            self.performSegue(withIdentifier: "mainUse", sender: self)
        }
    }

答案 1 :(得分:0)

准备(用于segue:)方法是由ViewController委托调用的,您应避免将需要触发的代码放在此处。

您可以要求进行封禁的是 performSegue(withIdentifier:sender:)

更多信息: https://developer.apple.com/documentation/uikit/uiviewcontroller/1621413-performsegue

重要注意事项

请记住,在连接时您的出口为零,如果您想将数据分配或传递给接收方VC,请创建一个强大的属性,并在连接之前但在VC实例化之后分配该值。标签,文本等在绘制之前不会接收任何数据。

如果您需要将文本字段中的条目发送到下一个视图控制器,请创建一个占位符属性,并在搜索过程中进行分配。

今天过得愉快!

答案 2 :(得分:0)

  

我将情节提要上的开始按钮链接到了VC,并给了它一个   标识符mainUse,因为它将转到mainUseController

这就是问题所在:您的segue似乎是通过从按钮拖动到目标视图控制器而生成的,请不要这样做,因为无论按钮操作中实现了什么,segue都会执行。而是从视图控制器本身(而不是从按钮)拖动到目标视图控制器:

enter image description here control +从视图控制器拖动到目标控制器

这时,点击按钮不会强行将您导航到目标视图控制器。接下来,您应该做的是通过调用performSegue(withIdentifier:sender:)方法来执行是否满足条件的segue:

@IBAction func startBtn(_ sender: Any) {
    if idInput.text == "" || dob1Field.text == "" || dob2Field.text == "" || dob3Field.text == "" {
        print("no text")
        return
    }

    // just don't forget to assign the segue identifier as 'mainUse'...
    performSegue(withIdentifier: "mainUse", sender: nil)
}

答案 3 :(得分:0)

@IBAction func startBtn(_ sender: Any) {

if idInput.text?.isEmpty ?? true || dob1Field.text?.isEmpty ?? true || dob2Field.text?.isEmpty ?? true || dob3Fieldtext?.isEmpty ?? true { print("some textField is empty") return } 

dispatch_async(dispatch_get_main_queue()) { [unowned self] in
self.performSegueWithIdentifier("YourIdentifier", sender: self)             
    }                                                                          
 }

如果您使用的是导航控制器:

  @IBAction func startBtn(_ sender: Any) {
    if idInput.text?.isEmpty ?? true || dob1Field.text?.isEmpty ?? true || dob2Field.text?.isEmpty ?? true || dob3Fieldtext?.isEmpty ?? true { print("some textField is empty") return } 

    if let viewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "YourIdentifier") as? NextViewController{
        if let navigator = navigationController {

            navigator.pushViewController(viewController, animated: true)
          }
    }
}