Ios 如何根据密码将输入的文本与字符串进行比较以触发新序列

Ios 如何根据密码将输入的文本与字符串进行比较以触发新序列,ios,swift,Ios,Swift,我有一个正在运行的应用程序,它的各个部分都有问题,并将数据从一个部分传递到另一个部分 我需要向最后一个按钮添加密码,该按钮触发将数据传递到最后一个视图控制器并向持有密码的人显示数据的事件 我有将代码传递到最后一页的代码,我有将警报传递给用户以输入密码的代码 我的问题是,在页面加载警报之前,我是否拥有segue的东西,而不管是否输入密码。如果segue事件发生在警报之后,则无论在文本框中输入什么,都不会发生任何事情 @IBAction func DataReveal(_ sender: UIBut

我有一个正在运行的应用程序,它的各个部分都有问题,并将数据从一个部分传递到另一个部分

我需要向最后一个按钮添加密码,该按钮触发将数据传递到最后一个视图控制器并向持有密码的人显示数据的事件

我有将代码传递到最后一页的代码,我有将警报传递给用户以输入密码的代码

我的问题是,在页面加载警报之前,我是否拥有segue的东西,而不管是否输入密码。如果segue事件发生在警报之后,则无论在文本框中输入什么,都不会发生任何事情

@IBAction func DataReveal(_ sender: UIButton)
{
     ID = ID2.text
     date = date2.text
     Answer1 = answ1.text
     Answer2 = answ2.text
     switch sender.tag
     {
     case 1: send = "Thanks"
     default: print("No Selection")
     }
     let alertController = UIAlertController(title: "Password check", message: "Enter Password to see collected data", preferredStyle: .alert)
        alertController.addTextField
        {
            textField in
            textField.placeholder = "Enter Password"
            textField.isSecureTextEntry = true
        }
        let confirmActionBtn = UIAlertAction(title: "OK", style: .default)
        {
            [weak alertController] _ in
            guard let alertController = alertController, let textField = alertController.textFields?.first else
            {
                return
            }
            print("Password is \(String(describing: textField.text))")

            //Just compare Entered String in textfield with your original password password
            //if password is matched push or segue your required controller
        }
        alertController.addAction(confirmActionBtn)
        let cancelAction = UIAlertAction(title: "Cancel", style: .cancel, handler: nil)
        alertController.addAction(cancelAction)
        self.present(alertController, animated: true, completion: nil)
        self.performSegue(withIdentifier: "Link6", sender: self)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?)
    {
        if segue.identifier == "Link6", let destination = segue.destination as? DataviewController
        {
            destination.Answer2 = self.Answer2
            destination.Answer1 = self.Answer1
            destination.ID = self.ID
            destination.date = self.date
            destination.send = self.send
        }
    }
我已经做了所提供的一个答案中提到的更改,我尝试运行代码,但仍然存在另一个问题,因为它仍然没有将textfield与password字符串变量进行比较,并且当输入密码时,没有任何执行segue移动

 @IBAction func DataReveal(_ sender: UIButton)
    {
        ID = ID2.text
        date = date2.text
        Answer1 = answ1.text
        Answer2 = answ2.text
        switch sender.tag
        {
        case 1: send = "current data collected"
        default: print("No Selection")
        }
        let alertController = UIAlertController(title: "Password check", message: "Enter Password to see collected data", preferredStyle: .alert)
        alertController.addTextField
        {
            textField in
            textField.placeholder = "Enter Password"
            textField.isSecureTextEntry = true
        }
        let confirmActionBtn = UIAlertAction(title: "OK", style: .default)
        {
            [weak alertController] _ in
            guard let alertController = alertController, let textField = alertController.textFields?.first else
            {
                return
            }
            print("Password is \(String(describing: textField.text))")
            func performSegue(withIdentifier identifier: String, sender: Any?) -> Bool
            {
                if identifier == "Link6"
                {
                    if (textField.text == self.password)
                    {
                        return true
                    }
                }
                return false
            }
        }
        alertController.addAction(confirmActionBtn)
        let cancelAction = UIAlertAction(title: "Cancel", style: .cancel, handler: nil)
        alertController.addAction(cancelAction)
        self.present(alertController, animated: true, completion: nil)
        //self.performSegue(withIdentifier: "Link6", sender: self)
    }
    override func prepare(for segue: UIStoryboardSegue, sender: Any?)
    {
        if segue.identifier == "Link6", let destination = segue.destination as? DataviewController
        {
            destination.Answer2 = self.Answer2
            destination.Answer1 = self.Answer1
            destination.ID = self.ID
            destination.date = self.date
            destination.send = self.send
        }
    }

警报是异步的,正如执行segue一样,因此此代码正在执行segue并显示警报


如果在警报解除之前不想执行segue,则需要在
confirmationBTN
处理程序中调用
performSegue(标识符:sender:)

这是在shouldPerformSegue方法中完成的

override func shouldPerformSegue(withIdentifier identifier: String, sender: Any?) -> Bool {

    if identifier == "FirstToUsersSegue" {
        if (userText.text == username && passText.text == password) {
            return true
        }
    }

    return false
}

我添加了您提供的代码,我在passText.text上遇到错误。应该不需要使用
shoulperformsegue(带标识符:sender:)
。该方法通常用于防止segue在触发后触发。例如,您可能有一个按钮触发segue,但出于某种原因可能希望阻止它触发。因为你可以完全控制触发segue的时间,所以你不需要实现这个方法。你将如何实现它?这是一个例子,你必须使用你自己的标识符和变量。但是逻辑是正确的。是的,我在确认中添加了代码,我只是在passText.text上得到了一个错误,那家伙以前提供过。你知道实现这个的方法吗