Мне интересно, как заставить клавиатуру исчезать, когда пользователь касается вне UITextField
.
ios
cocoa-touch
uitextfield
uikit
jonepatr
источник
источник
Ответы:
Вам нужно будет добавить
UITapGestureRecogniser
и назначить его представлению, а затем вызвать отставку первым респондентом наUITextField
на его селектора.Код:
В viewDidLoad
В dismissKeyboard:
(Где
aTextField
текстовое поле, которое отвечает за клавиатуру)Версия Swift 3 выглядит так
Для dismissKeyboard
источник
[aTextField resignFirstResponder]
было бы,[self.view endEditing:YES];
это не нуждается в ссылке на текстовое поле и будет работать для нескольких текстовых полей[self.view addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self.view action:@selector(endEditing:)]];
[tap setCancelsTouchesInView:NO];
за ответ @qiaoyi; У меня была проблема с таблицей, не отвечающей на выбор строки. 5 лет спустя, надеюсь, это поможет кому-то еще.self.view.addGestureRecognizer(UITapGestureRecognizer(target: self.view, action: #selector(UIView.endEditing(_:))))
Я растянул несколько ответов.
Используйте ивар, который инициализируется во время
viewDidLoad:
Уволить то, что когда-либо в настоящее время редактирует:
источник
Проверьте это, это будет самый простой способ сделать это,
Или
Эта библиотека будет обрабатывать, включая автоматическую прокрутку полосы прокрутки, нажатие клавиши пробела, чтобы скрыть клавиатуру и т. Д.
https://github.com/michaeltyson/TPKeyboardAvoiding
источник
Я вижу, что у некоторых людей возникают проблемы с использованием
UITapGestureRecognizer
метода. Самый простой способ, которым я выполнил эту функцию, при этом оставляя неизменным поведение нажатия моей существующей кнопки, это добавление только одной строки к ответу @ Jensen2k:Это позволило моим существующим кнопкам по-прежнему работать без использования метода @Dmitry Sitnikov.
Прочитайте об этом
property
здесь (поискCancelsTouchesInView
): Ссылка на класс UIGestureRecognizerЯ не уверен, как это будет работать с полосами прокрутки, так как я вижу, что у некоторых были проблемы, но, надеюсь, кто-то еще может столкнуться с тем же сценарием, что и у меня.
источник
UIImageView
, добавьте,[imageView setUserInteractionEnabled:NO];
и вы «щелкнете» по нему, чтобы этот метод работал.Лучше сделать ваш
UIView
экземплярUIControl
(в конструкторе интерфейсов) и затем связать ихTouchUpInside
событие сdismissKeyboard
методом. ЭтотIBAction
метод будет выглядеть так:источник
UITapGestureRecognizer
мешало постукивать по кнопкам внутри вида).touchesEnded
не сработало, потому что произошлаUIScrollView
путаница с цепочкой респондента.)Swift 4
Настройте
UIViewController
этот метод расширения один раз, напримерviewDidLoad
:и клавиатура будет закрыта даже при нажатии на
NavigationBar
.источник
Версия Swift, это работает в сочетании с другими элементами (вроде того
UIButton
или другогоUITextField
):источник
self
а неself.view
canclesTouchesInView
это удобное свойство для использования. Спасибо.c#
. К сведению, что точка с запятой разрешена по синтаксису, просто нет необходимости.Как насчет этого: я знаю, что это старый пост. Это может помочь кому-то :)
источник
Это хорошее общее решение:
Objective-C:
Swift:
Основано на решении @icodebuster: https://stackoverflow.com/a/18756253/417652
источник
Swift 4 oneliner
источник
Я думаю, что самый простой (и лучший) способ сделать это - создать подкласс вашего глобального представления и использовать
hitTest:withEvent
метод для прослушивания любого прикосновения. Касания на клавиатуре не зарегистрированы, поэтому hitTest: withEvent вызывается только когда вы касаетесь / прокручиваете / проводите / зажимаете ... где-то еще, а затем вызываете[self endEditing:YES]
.Это лучше, чем использовать,
touchesBegan
потому чтоtouchesBegan
не вызывается, если вы нажмете кнопку в верхней части представления. Это лучше, чем тот,UITapGestureRecognizer
который не может распознать, например, жест прокрутки. Это также лучше, чем использование тусклого экрана, потому что в сложном и динамичном пользовательском интерфейсе нельзя ставить тусклый экран везде. Более того, он не блокирует другие действия, вам не нужно дважды нажимать, чтобы выбрать кнопку снаружи (как в случаеUIPopover
).Кроме того, это лучше, чем звонить
[textField resignFirstResponder]
, потому что у вас может быть много текстовых полей на экране, так что это работает для всех них.источник
Это должен быть самый простой способ скрыть клавиатуру, коснувшись снаружи:
(из Как отключить клавиатуру, когда пользователь нажимает на другую область за пределами текстового поля? )
источник
Если представление вообще встроено в
UIScrollView
то вы можете использовать следующее:Первый из них будет анимировать экранную клавиатуру при прокрутке таблицы, а второй - скрыть клавиатуру, как приложение «Стандартные сообщения».
источник
Вы можете сделать это, используя раскадровку в XCode 6 и выше:
Создать действие, чтобы скрыть клавиатуру
Добавьте это в файл заголовка класса, используемого вашим ViewController:
Затем добавьте это в файл реализации того же ViewController:
Теперь это будет одно из «полученных действий» для вашей раскадровки (например, ViewController):
Подключите действие к пользовательскому событию
Теперь вам нужно подключить это действие к пользовательскому жесту касания клавиатуры.
Важно. Вам необходимо преобразовать UIView, который содержится в вашей раскадровке, в UIControl , чтобы он мог принимать события. Выберите представление в иерархии сцены View Controller:
... и измените его класс:
Теперь перетащите курсор из маленького кружка рядом с «полученным действием» для вашей сцены на «пустую» часть вашей сцены (фактически вы перетаскиваете «Полученное действие» в UIControl). Вам будет показан выбор событий, к которым вы можете подключить свое действие:
Выберите опцию «подправить изнутри». Теперь вы подключили созданный IBAction к пользовательскому действию касания клавиатуры. Когда пользователь нажимает на клавиатуру, она будет скрыта.
(ПРИМЕЧАНИЕ. Чтобы привязать действие к событию, вы также можете перетащить полученное действие непосредственно в UIControl в иерархии View Controllers. В иерархии оно отображается как «Control».)
источник
Если я вас правильно понял, вы хотите уйти в отставку, нажав на кнопку вне,
textfield
но у вас нет ссылки на вашtextfield
.Попробуй это;
reftextField
Теперь в
textFieldDidBeginEditing
указанном текстовом полеТеперь вы можете с радостью использовать на любой кнопке часы (рекомендуется добавить прозрачную кнопку при начале редактирования)
Или для отставки готовой кнопки попробуйте это.
источник
Просто чтобы добавить сюда список моей версии о том, как отклонить клавиатуру при внешнем прикосновении.
viewDidLoad:
Где угодно:
источник
Здесь вы найдете множество отличных ответов об использовании кнопки
UITapGestureRecognizer
--all of breakUITextField
(X). Решение состоит в том, чтобы подавить распознаватель жестов через его делегат:Это не самое надежное решение, но оно работает для меня.
источник
return !touchViewIsButton
. Я предполагаю, что любые другие кнопки, которые должны отклонить клавиатуру, должны делать это в своих действиях. Кроме того, TouchUpInside может не вызываться при изменении раскладки при отклонении клавиатуры.Вы можете создать категорию для UiView и переопределить метод touchesBegan следующим образом.
Это работает нормально для меня. И это централизованное решение этой проблемы.
источник
Быстрая версия ответа @ Jensen2k:
Один лайнер
источник
Я использовал пример Барри для моей новой разработки. Работало отлично! но я должен был включить небольшое изменение, необходимое для отклонения клавиатуры только для редактируемого текстового поля.
Итак, я добавил в пример Барри следующее:
Также я изменил метод hideKeyboard следующим образом:
источник
Один из самых простых и коротких способов - добавить этот код в свой
viewDidLoad
источник
источник
Я попробовал многие ответы здесь, и мне не повезло. Мой распознаватель жестов касания всегда заставлял меня
UIButtons
не отвечать при касании, даже когда я установилcancelsTouchesInView
свойство распознавателя жестов на НЕТ.Вот что в итоге решило проблему:
Ивару:
Когда текстовое поле начинает редактирование, установите распознаватель жестов:
Тогда дело в том, как настроить
dismissKeyboard
метод:Я полагаю, что есть что-то о том, как вывести
dismissKeyboardSelector
выполнение из стека выполнения обработки касанием ...источник
Отправить сообщение
resignFirstResponder
в текстовый файл, который поместил его туда. Пожалуйста, смотрите этот пост для получения дополнительной информации.источник
Это работает
В этом примере aTextField является единственным UITextField .... Если есть другие или UITextViews, есть еще кое-что сделать.
источник
источник
Добавьте этот код в ваш файл ViewController.m :
источник
В этом случае можно использовать ScrollView и добавить его
TextField
в ScrollView, и я хочу нажатьScrollView
и просмотреть, а затем закрыть клавиатуру. Я попытался создать пример кода на всякий случай. Нравится,Ваш Раскадровка Посмотрите на это как.
источник
Вы можете использовать метод UITapGestureRecongnizer для отклонения клавиатуры, щелкнув за пределами UITextField. При использовании этого метода всякий раз, когда пользователь нажимает за пределами UITextField, клавиатура получает отклонение. Ниже приведен фрагмент кода для его использования.
источник
Установить текстовые поля делегата в представлении загрузил:
Добавьте эту функцию:
источник