Как определить, какой UITextField был изменен с textFieldDidChange
Я использую несколько UITextField
и хотят делать в любое время что-нибудь меняется в любом из них.
Это выглядит в основном как:
@IBOutlet weak var f1: UITextField!
@IBOutlet weak var f2: UITextField!
@IBOutlet weak var f3: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
f1.addTarget(self, action: #selector(textFieldDidChange), for: .editingChanged)
f2.addTarget(self, action: #selector(textFieldDidChange), for: .editingChanged)
f3.addTarget(self, action: #selector(textFieldDidChange), for: .editingChanged)
}
@objc func textFieldDidChange(_ textField: UITextField) {
// Data in one of the fields changed.
if self.view.tag == 1 {
print("field 1")
} else {
if self.view.tag == 2 {
print("field 2")
}
//...
}
}
Как видите, я пытался установить теги, но не уверен, как получить к ним доступ здесь.
Я использую XCode 9.01 и Swift 4.
2 ответа
Решение
Вам не нужны теги, так как у вас есть торговые точки. Просто сравните textField
Параметр для каждого из ваших торговых точек:
@objc func textFieldDidChange(_ textField: UITextField) {
if textField == f1 {
print("field 1")
} else if textField == f2 {
print("field 2")
} else if textField == f3 {
print("field 3")
}
}
Быстрое, скромное улучшение по сравнению с ответом rmaddy:
@objc func textFieldDidChange(_ textField: UITextField) {
switch textField {
case f1: print("field 1")
case f2: print("field 2")
case f3: print("field 3")
default: fatalError(“Unknown field: \(textField)”)
}
}
Помимо использования switch
- что может немного улучшить читабельность кода, можно утверждать - эта версия также вызывает ошибку во время выполнения, если передается неожиданное текстовое поле. К счастью, это могло бы просто позже обнаружить ошибку программирования;)