swift中如何检查多个文本字段是否为空并相应启用按钮

mrphzbgm  于 2023-06-21  发布在  Swift
关注(0)|答案(2)|浏览(113)

当所有文本字段都只有部分文本时,我需要启用nextBtn
尝试以下代码:但是有了这个代码,当我点击第一个文本字段,然后我的nextBtn成为启用为什么?如何使nextBtn启用后,填写所有文本字段只.请指引我

override func viewDidLoad() {
    super.viewDidLoad()
    
    nextBtn.isEnabled = false
    nextBtn.alpha = 0.5
}

func textFieldDidBeginEditing(_ textField: UITextField) {
    
    if fullNameTextField.text == nil{
        nextBtn.alpha = 0.5
        nextBtn.isEnabled = false
    }
    else if dateOfBirthTextField.text == nil{
        nextBtn.alpha = 0.5
        nextBtn.isEnabled = false
    }
    else if schoolNameTextField.text == nil{
        nextBtn.alpha = 0.5
        nextBtn.isEnabled = false
    }
    else if schoolLocationTextField.text == nil{
        nextBtn.alpha = 0.5
        nextBtn.isEnabled = false
    }
    else if gradeClassTextField.text == nil{
        nextBtn.alpha = 0.5
        nextBtn.isEnabled = false
    }
    else{
        nextBtn.alpha = 1
        nextBtn.isEnabled = true
    }
}

编辑:我已经试过了。现在,在第二个文本字段上录音后,然后nextBtn变为启用,为什么?请指引我

func textFieldDidBeginEditing(_ textField: UITextField) {

    if fullNameTextField.text == "", dateOfBirthTextField.text == "", schoolNameTextField.text == "", gradeClassTextField.text == ""{
        nextBtn.alpha = 0.5
        nextBtn.isEnabled = false
    }
    else{
        nextBtn.alpha = 1
        nextBtn.isEnabled = true
    }
}
svmlkihl

svmlkihl1#

你只要这样做就可以了

let fields = [fullNameTextField, dateOfBirthTextField, schoolNameTextField, schoolLocationTextField, gradeClassTextField]
let isVaildFields = fields.allSatisfy { field in
            !field.text.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty
         } 
if isVaildFields {
    nextBtn.alpha = 1
    nextBtn.isEnabled = true
} else {
    nextBtn.alpha = 0.5
    nextBtn.isEnabled = false
}
c9x0cxw0

c9x0cxw02#

一种方法是

class ViewController: UIViewController, UITextFieldDelegate {
    
    @IBOutlet weak var fullNameTextField: UITextField!
    @IBOutlet weak var dateOfBirthTextField: UITextField!
    @IBOutlet weak var schoolNameTextField: UITextField!
    @IBOutlet weak var schoolLocationTextField: UITextField!
    @IBOutlet weak var gradeClassTextField: UITextField!
    @IBOutlet weak var nextBtn: UIButton!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        nextBtn.isEnabled = false
        nextBtn.alpha = 0.5
    }

    func textFieldDidBeginEditing(_ textField: UITextField) {
        let fields = [fullNameTextField, dateOfBirthTextField, schoolNameTextField,
                      schoolLocationTextField, gradeClassTextField]
        let isValidFields = fields.allSatisfy {
            !($0?.text?.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty ?? true)
        }
        
        if isValidFields {
            nextBtn.alpha = 1
            nextBtn.isEnabled = true
        } else {
            nextBtn.alpha = 0.5
            nextBtn.isEnabled = false
        }
    }
}

您也可以通过创建文本字段@IBOutlet的列表来实现,如下所示:

class ViewController: UIViewController, UITextFieldDelegate {
    
    @IBOutlet var textFields: [UITextField]!
    @IBOutlet weak var nextBtn: UIButton!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        nextBtn.isEnabled = false
        nextBtn.alpha = 0.5
    }

    func textFieldDidBeginEditing(_ textField: UITextField) {
        let isValidFields = textFields.allSatisfy {
            !($0.text?.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty ?? true)
        }
        
        if isValidFields {
            nextBtn.alpha = 1
            nextBtn.isEnabled = true
        } else {
            nextBtn.alpha = 0.5
            nextBtn.isEnabled = false
        }
    }
}

如果你只想为单个文本域做这件事,你可以简单地像这样做。

class ViewController: UIViewController, UITextFieldDelegate {
    
    @IBOutlet weak var fullNameTextField: UITextField!
    @IBOutlet weak var dateOfBirthTextField: UITextField!
    @IBOutlet weak var schoolNameTextField: UITextField!
    @IBOutlet weak var schoolLocationTextField: UITextField!
    @IBOutlet weak var gradeClassTextField: UITextField!
    @IBOutlet weak var nextBtn: UIButton!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        nextBtn.isEnabled = false
        nextBtn.alpha = 0.5
    }
    
    func isValid(_ textField: UITextField) -> Bool {
        return !(textField.text?.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty ?? true)
    }

    func textFieldDidBeginEditing(_ textField: UITextField) {
        if isValid(fullNameTextField), isValid(dateOfBirthTextField),
           isValid(schoolNameTextField), isValid(schoolLocationTextField),
           isValid(gradeClassTextField) {
            nextBtn.alpha = 1
            nextBtn.isEnabled = true
        } else {
            nextBtn.alpha = 0.5
            nextBtn.isEnabled = false
        }
    }
}

相关问题