Swift中条件不满足时如何终止Segue?密码匹配校验问题
密码校验与Segue跳转控制解决方案
你的代码存在两个核心问题:
submitButton的逻辑完全颠倒:当前是密码匹配时无操作,不匹配时执行Segue,和需求完全相反shouldPerformSegue固定返回false,会直接阻止所有Segue跳转
以下是修正后的完整实现方案:
修正后的代码
import UIKit class ViewController: UIViewController { @IBOutlet weak var firstName: UITextField! @IBOutlet weak var lastName: UITextField! @IBOutlet weak var emailId: UITextField! @IBOutlet weak var password: UITextField! @IBOutlet weak var confirm: UITextField! @IBOutlet weak var submit: UIButton! let systemBlue = UIColor(red: 0/255, green: 122/255, blue: 255/255, alpha: 1.0).cgColor // 优化密码校验逻辑:增加空值判断,避免空文本误判匹配 func isPasswordValid() -> Bool { guard let passText = password.text, !passText.isEmpty, let confirmText = confirm.text, !confirmText.isEmpty else { return false } return passText == confirmText } override func viewDidLoad() { super.viewDidLoad() // 统一处理输入框样式,减少重复代码 [firstName, lastName, emailId, password, confirm].forEach { field in field?.layer.borderColor = systemBlue field?.layer.borderWidth = 1.0 field?.layer.cornerRadius = 10 } submit?.layer.borderColor = systemBlue submit?.layer.borderWidth = 2.0 submit?.layer.cornerRadius = 10 submit?.titleLabel?.textAlignment = .center } @IBAction func submitButtonTapped(_ sender: UIButton) { if isPasswordValid() { // 密码匹配,执行Segue跳转 performSegue(withIdentifier: "transmition", sender: self) } else { // 密码不匹配/为空,提示用户并终止跳转 let alert = UIAlertController(title: "提示", message: "密码与确认密码不匹配或不能为空,请重新输入", preferredStyle: .alert) alert.addAction(UIAlertAction(title: "确定", style: .default)) present(alert, animated: true) } } // 如果你有多个Segue需要控制,可以保留这个方法;单个Segue场景下可省略 /* override func shouldPerformSegue(withIdentifier identifier: String, sender: Any?) -> Bool { if identifier == "transmition" { let isValid = isPasswordValid() if !isValid { let alert = UIAlertController(title: "提示", message: "密码与确认密码不匹配或不能为空,请重新输入", preferredStyle: .alert) alert.addAction(UIAlertAction(title: "确定", style: .default)) present(alert, animated: true) } return isValid } return true // 其他Segue正常执行 } */ }
关键修正说明
- 逻辑反转:按钮点击事件中,仅当密码匹配时才执行Segue跳转,不匹配时弹出提示终止流程
- 校验增强:新增空文本判断,避免用户输入空值时误判为密码匹配
- 体验优化:增加弹窗提示,明确告知用户错误原因
- 代码简化:用循环统一处理输入框样式,减少重复代码
内容的提问来源于stack exchange,提问作者stacksflow
相关产品推荐
相关产品推荐

