Я знаю, что должен сказать своему UITextField об отставке первого респондента, когда я хочу закрыть клавиатуру, но я не уверен, как узнать, когда пользователь нажал клавишу «Готово» на клавиатуре. Могу ли я посмотреть уведомление?
181
Ответы:
Я назначил делегата
UITextField
своегоViewController
класса.В этом классе я реализовал этот метод следующим образом:
источник
NO
вместоYES
?NO
вы избегаете добавления строки возврата к тексту.Если вы подключите событие DidEndOnExit текстового поля к действию (IBAction) в InterfaceBuilder, оно будет отправлено, когда пользователь отклонит клавиатуру (с клавишей возврата), и отправитель будет являться ссылкой на UITextField, который вызвал событие.
Например:
Затем в InterfaceBuilder свяжите событие DidEndOnExit текстового поля с этим действием на вашем контроллере (или всем, что вы используете для связи событий из пользовательского интерфейса). Всякий раз, когда пользователь вводит текст и отклоняет текстовое поле, контроллеру будет отправлено это сообщение.
источник
Вы также можете создать метод в вашем контроллере
а затем в инспекторе подключений в IB подключите к нему событие «Did End On Exit».
источник
DidEndOnExit
событие, вам не нужно звонитьresignFirstResponder
. Вы можете проверить это, поставив символическую точку останова[UIResponder resignFirstResponder]
. Обратите внимание, что даже если вы не вызовете resignFirstResponder, он все равно будет вызываться системой. Это объясняется в превосходной книге (книгах) Мэтта Нойбурга: apeth.com/iOSBook/…Куби, спасибо. Ваш код сработал. Просто чтобы быть явным (для новичков, таких как), как вы говорите, вы должны установить
UITextField
's'delegate
равным ViewController, в котором находится текстовое поле. Вы можете сделать это где угодно. Я выбралviewDidLoad
метод.источник
delegate
. Вам не нужно делать это программно, как показано выше. Любой подход работает отлично.Вот трюк для получения автоматического режима отключения клавиатуры без кода вообще. В наконечнике отредактируйте прокси-объект «Первый ответчик» в инспекторе удостоверений, добавив новое действие «Первый ответчик»; давайте назовем это
dummy:
. Теперь подключите событие Did End on Exit текстового поля кdummy:
действию прокси-объекта First Responder. Это оно! Поскольку событие «Завершить при выходе» в текстовом поле теперь содержит пару «действие - цель», текстовое поле автоматически отклоняет свою клавиатуру, когда пользователь нажимает «Возврат»; и поскольку нет штрафов за то, что не удалось найти обработчик для сообщения, отправленного по цепочке респондента, приложение не падает, даже еслиdummy:
нигде нет реализации .источник
Просто добавь
где вы хотите отключить клавиатуру и отобразить вид выбора.
источник
В Swift вы можете написать IBAction в контроллере и установить для этого действия событие « Завершить при выходе» текстового поля.
источник
Swift 4.2
и это будет работать на 100%источник
Вы также можете использовать
Лучший, если у вас много полей Uitextfields:
источник
Вот что я должен был сделать, чтобы заставить его работать, и я думаю, что это необходимо для любого, у кого есть цифровая клавиатура для клавиатуры (или любой другой без кнопки готово):
Я создал функцию под названием
Это также было определено в файле .h.
После этого я связался с битом «приземления» для ViewController в Интерфейсном Разработчике.
В функции 'background is tapped' я поставил это:
Просто не забудьте заменить answerField на имя UITextField, с которого вы хотите удалить клавиатуру (очевидно, убедитесь, что ваш UITextField определен, как показано ниже :)
Я знаю, что эта тема, вероятно, умерла давным-давно ... но я надеюсь, что это поможет кому-то, где-то!
источник
Вы заметите, что метод textFieldShouldReturn предоставляет объект текстового поля, который нажал клавишу DONE. Если вы установите TAG, вы можете включить это текстовое поле. Или вы можете отслеживать и сравнивать указатель объекта с некоторым значением члена, сохраненным его создателем.
Мой подход такой для самостоятельной работы:
Тем временем я поставил «проверку», которая отрицает отставку. Это только для иллюстрации, поэтому, если пользователь печатает НЕТ! в поле он не уволит. Поведение было таким, как я хотел, но последовательность вывода была не такой, как я ожидал.
Следующее - мой вывод NSLog для этого отказа, сопровождаемого принятием. Вы заметите, что я возвращаю результат отставки, но я ожидал, что он вернет мне ЛОЖЬ, чтобы сообщить об этом вызывающей стороне ?! Помимо этого, он имеет необходимое поведение.
источник
Вот довольно чистый способ завершить издание ключом возврата или касанием на заднем плане.
В Интерфейсном Разработчике вставьте свои поля в представление класса UIFormView
Что делает этот класс:
Вот код:
Интерфейс
Реализация
Подклассируя форму и переопределяя
textFieldValueIsValid:
метод, вы можете избежать окончания редактирования, если значение не является правильным для данного поля.Если у поля есть делегат, установленный в Интерфейсном Разработчике, то форма не изменяет его. Я не вижу много причин назначать другого делегата для определенного поля, но почему бы и нет ...
Есть много способов улучшить этот класс представления формы - присоединить делегат, сделать некоторую разметку, обработать, когда клавиатура покрывает поле (используя фрейм currentEditingTextField), автоматически запустить редактирование для следующего поля, ...
Я лично держу его в своей структуре и всегда делю на подклассы, чтобы добавить функции, это довольно часто полезно "как есть".
Я надеюсь, что это поможет. Ура все
источник
если вы хотите все редактирование в UIViewController вы можете использовать.
и если вы хотите закрыть скрытую скрытую клавиатуру UITextField, используйте.
1. добавить делегата в ваш viewcontroller.h
сделать делегирование невозможным для вашего текстового поля.
self.yourTextField.delegate = self;
добавьте этот метод в ваш viewcontroller.
- (BOOL) textFieldShouldEndEditing: (UITextField *) textField {[textField resignFirstResponder]; вернуть ДА;}
источник
Программно установить делегат UITextField в Swift 3
Реализуйте UITextFieldDelegate в вашем файле ViewController.Swift (например, класс ViewController: UIViewController, UITextFieldDelegate {)
// Mark: - обработка делегата textField ..
источник
Создайте функцию hidekeyboard и свяжите ее с текстовым полем в файле .xib и выберите DidEndOnExit
источник
Если вы создали представление с помощью Interface Builder, используйте следующее. Просто создайте метод,
Просто щелкните правой кнопкой мыши текстовое поле в представлении и установите событие как «Завершить при выходе», и подключите его к методу «dismissKeyboard».
Лучшее руководство для начинающих - "Head First iPhone и iPad Development, 2nd Edition"
источник
попробуй это
источник
источник
Любой, кто ищет Swift 3
1) Убедитесь, что делегат вашего UITextField подключен к вашему ViewController в раскадровке
2) Реализуйте UITextFieldDelegate в вашем файле ViewController.Swift (например, класс ViewController: UIViewController, UITextFieldDelegate {)
3) Используйте метод делегата ниже
источник
Вот как я отклоняю клавиатуру в Swift 4.2, и она работает для меня:
источник
Swift 3, iOS 9+
@IBAction private func noteFieldDidEndOnExit(_ sender: UITextField) {}
UPD: у меня все еще отлично работает. Я думаю, что парень, который посвятил этот ответ, просто не понял, что ему нужно привязать это действие к UITextField на раскадровке.
источник
источник