更新时间: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
}