Как определить, какой 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 - что может немного улучшить читабельность кода, можно утверждать - эта версия также вызывает ошибку во время выполнения, если передается неожиданное текстовое поле. К счастью, это могло бы просто позже обнаружить ошибку программирования;)

Другие вопросы по тегам