如何在Swift中使用shouldPerformSegue()检查字段后继续使用segue

时间:2016-12-21 06:50:22

标签: ios swift segue

使用shouldPerforSegue() func我能够在搜索之前检查一些字段,但是,即使字段在触发segue时字段不好,我仍需要它继续segue。

现在,当用户点击触发segue的按钮时,我正在检查图像是否已经上传到服务器。我显示一个进度条以及一个警告,指示%左侧。但是,现在将图像上传到服务器后,进度条指示100%。我仍然需要手动点击"确定"然后重新单击“查询”按钮。我试图看看是否有办法绕过这种障碍,只需继续使用segue。

我尝试在上传图片后以编程方式触发segue按钮,但它无法按预期工作。

UIApplication.shared.sendAction(self.saveButton.action!, to: self.saveButton.target, from: nil, for: nil)

我检查验证的功能:

override func shouldPerformSegue(withIdentifier identifier: String, sender: Any?) -> Bool {
        if ((sender as? UIBarButtonItem) != nil) && uploadingImagesToFirebase  {
            // Create the alert controller
            let alertController = UIAlertController(title: "Uploading Images...", message: "", preferredStyle: .alert)
            // Create an ok button
            let okAction = UIAlertAction(title: "Ok", style: UIAlertActionStyle.default) { (result : UIAlertAction) -> Void in
                print("OK")
            }
            alertController.addAction(okAction)

            self.present(alertController, animated: true, completion: {
                //  Add your progressbar after alert is shown (and measured)
                let rect = CGRect(x: alertController.view.frame.width * 0.10, y: alertController.view.frame.height / 2, width: alertController.view.frame.width * 0.80, height: 100)
                self.progressView = UIProgressView(frame: rect)
                alertController.view.addSubview(self.progressView!)
            })

            return false
        }
        return true
    }
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        // If user clicks on a job cell
        if segue.identifier == "showJobDetails" {
            ...
        }
        else if addJobButton == sender as? UIButton {
            print("Adding a new job from customer view")
            ...
        }
        // If save button was choice selected by user
        else if segue.identifier == "identifier {
            customer.firstName = firstNameTextField.text
            customer.middleName = middleNameTextField.text
            customer.lastName = lastNameTextField.text
            customer.address = addressTextField.text
            customer.email = emailTextField.text
            customer.phone = phoneTextField.text

            customer.jobs = customerJobs

            updateCustomerValuesInFirebase()
            updateJobValuesInFirebase()
        }
    }

2 个答案:

答案 0 :(得分:1)

在Swift3中,您必须通过以下代码行执行segue:

performSegue(withIdentifier: identifier, sender: sender)

identifiersender值取决于您调用performSegue的位置,例如,如果您在shouldPerformSegue函数中,则可以使用函数输入值,但如果你在其他功能中,你必须自己添加标识符(你在故事板中为segue设置它)并将发送者设置为nil。

答案 1 :(得分:1)

在检查之前(使用shouldPerformSegue(withIdentifier:sender:)),您应首先执行此操作,您可以使用performSegueWithIdentifier:sender:来实现此目的:

  

使用当前的指定标识符启动segue   查看控制器的故事板文件。

实际上,shouldPerformSegue(withIdentifier:sender:)方法执行以下操作:

  

确定具有指定标识符的segue是否应该是   进行。

所以你应该这样做:

performSegue(withIdentifier: "identifier", sender: self)

在使用shouldPerformSegue(withIdentifier:sender:)进行检查之前。

如果您不知道如何设置segue的标识符,请选中this answer