iOS-диапазон текстового поля shouldChangeCharactersIn отключает целевой метод .editingChanged - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть textField, в котором я отключаю заглавные буквы, установив .autocapitalizationType = .none, а в shouldChangeCharactersIn range я заменяю любые заглавные буквы строчными буквами на , используя этот ответ .

Принудительно вводим только строчные буквыбуквы работают нормально, но целевой метод, который я добавил в .editingChanged, перестал работать.

Почему .editingChanged перестал работать?

let emailTextField: UITextField = {
    let textField = UITextField()
    return textField
}()

let userNameTextField: UITextField = {
    let textField = UITextField()
    textField.autocapitalizationType = .none
    textField.addTarget(self, action: #selector(printSomething), for: .editingChanged)
    return textField
}()

@objc func printSomething() {
    // as I type inside the usernameTextField this no longer prints
    print("something")
}

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {

    // only change characters for username textfield
    if textField == userNameTextField {

        userNameTextField.text = (textField.text! as NSString).replacingCharacters(in: range, with: string.lowercased())
        return false
    }
    return true
}

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

Изменить, чтобы вернуть true

   if textField == userNameTextField {

        userNameTextField.text = (textField.text! as NSString).replacingCharacters(in: range, with: string.lowercased())
        return true
    }
0 голосов
/ 28 февраля 2019

Проблема в вашем объявлении userNameTextField.Когда вы его инициализируете, нет self.Вам нужно изменить его объявление на lazy:

lazy var userNameTextField: UITextField = {
    let textField = UITextField()
    textField.autocapitalizationType = .none
    textField.addTarget(self, action: #selector(editingChanged), for: .editingChanged)
    return textField
}()

. Я бы также удалил диапазон mustChangeCharacters и выполнил бы все ваши манипуляции с символами внутри метода editChanged:

@objc func editingChanged(_ textField: UITextField) {
    print(textField.text!)
    textField.text = textField.text!.lowercased()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...