Swift: прослушиватель textField не отвечает на изменение текста - PullRequest
0 голосов
/ 06 августа 2020

К вашему сведению: Я разработчик JS и недавно начал изучать Swift. Поэтому я не уверен, что использую здесь правильную терминологию.

В моем приложении у меня есть простое текстовое поле: enter image description here
enter image description here
введите описание изображения здесь

Он привязан к этой розетке:

@IBOutlet weak var activationCodeTextField1: UITextField!  

«Слушатель» реализован следующим образом:

self.activationCodeTextField1.addTarget(self, action: #selector(self.textField1DidChange(_:)), for: UIControl.Event.editingChanged)
self.activationCodeTextField1.delegate = self 

textField1DidChange функция:

 @IBAction func textField1DidChange(_ sender: AnyObject) {
        print("TextField1DidChange") 
       }

Но когда я что-то набираю в TextField, ничего не печатается. Так что, может быть, textField1DidChange не срабатывает по какой-то причине?

Но я действительно не знаю почему.

Ответы [ 2 ]

2 голосов
/ 06 августа 2020

Обновление: вот пример кода для тестирования на игровых площадках.

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        let textField = UITextField()
        textField.frame = CGRect(x: 0, y: 0, width: 200, height: 50)
        textField.placeholder = "enter text here"
        textField.center = view.center
        view.addSubview(textField)
        textField.addTarget(self, action: #selector(textChanged), for: .editingChanged)
    }

    @objc func textChanged(_ sender: UITextField) {
        print(sender.text)
    }
}
PlaygroundPage.current.setLiveView(ViewController())

Событие valueChanged должно использоваться, чтобы определить, изменился ли text. editingChanged определяет, изменилось ли состояние UITextField между состояниями редактирования или ожидания.

Заменить:

self.activationCodeTextField1.addTarget(self, action: #selector(self.textField1DidChange(_:)), for: UIControl.Event.editingChanged)

С:

activationCodeTextField1.addTarget(self, action: #selector(self.textField1DidChange), for: .valueChanged)

Дополнение : Вам не нужно вводить self, если вы не находитесь внутри закрытия. И не нужно весь UIControl.Event.valueChanged, вы можете просто поставить .valueChanged, и все будет нормально.

0 голосов
/ 06 августа 2020

Удалите эти делегаты, а целевой метод просто измените действие для редактирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...