You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 15:51:41