且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

仅在填写了所有文本字段时才在Swift中启用按钮

更新时间:2023-10-06 12:15:22

Xcode 9•Swift 4

您可以 addTarget 到您的文本字段中监视控件事件 .editingChanged 并对所有这些事件使用单个选择器方法:

You can addTarget to your text fields to monitor for the control event .editingChanged and use a single selector method for all of them:

override func viewDidLoad() {
    super.viewDidLoad()
    doneBarButton.isEnabled = false
    [habitNameField, goalField, frequencyField].forEach({ $0.addTarget(self, action: #selector(editingChanged), for: .editingChanged) })
}

创建选择器方法并使用 guard 结合 where 子句(Swift) 3/4使用逗号)确保所有文本字段都不为空,否则只返回。 Swift 3不需要@objc,但Swift 4不需要:

Create the selector method and use guard combined with where clause (Swift 3/4 uses a comma) to make sure all text fields are not empty otherwise just return. Swift 3 does not require @objc, but Swift 4 does:

@objc func editingChanged(_ textField: UITextField) {
    if textField.text?.characters.count == 1 {
        if textField.text?.characters.first == " " {
            textField.text = ""
            return
        }
    }
    guard
        let habit = habitNameField.text, !habit.isEmpty,
        let goal = goalField.text, !goal.isEmpty,
        let frequency = frequencyField.text, !frequency.isEmpty
    else {
        doneBarButton.isEnabled = false
        return
    }
    doneBarButton.isEnabled = true
}

样本