Я настоятельно предпочитаю использовать шаблон цели / действия, отвечая на событие UIControlEventDidEndOnExit
, обычно, подключая его в Интерфейсном Разработчике, подключая событие «Did End On Exit», показанное в IB, к Владельцу файла, используя метод по моему выбору. Это будет первый вариант, который вы показали.
Вот почему я предпочитаю этот механизм:
Это много приложений (ну, по крайней мере, мои приложения), необходимо различать отмену ввода, скажем, касанием за пределами текстового поля, и завершение ввода кнопкой Готово на клавиатуре (документы, как правило, называют это кнопкой «возврат»). Поскольку метод делегата -textFieldDidEndEditing
вызывается в любое время, когда -resignFirstResponder
вызывается, когда поле является первым респондентом (независимо от причины завершения редактирования), необходимо иметь переменную где-нибудь, чтобы отслеживать путь о том, как вы заканчиваете редактирование. Это вводит уровень сложности, который просто не нужен.
В моем приложении я отвечаю на сенсорные события за пределами UITextField
, вызывая -resignFirstResponder
, чтобы отменить редактирование, не предпринимая дальнейших действий. Если я использую методы делегата, мне нужно будет установить здесь состояние, чтобы записать, что я беру «отмену» пути через мой код, и использовать метод делегата -textFieldShouldReturn
для обоих состояний установки, чтобы указать, что я прохожу через 'Done' путь моего кода, и вызвать -resignFirstResponder
. Грязное.
Использование здесь шаблона «цель / действие» приводит к более простому и понятному коду.