У меня довольно много элементов управления, разбросанных по многим ячейкам таблицы в моей таблице, и мне было интересно, есть ли более простой способ уволить клавиатуру без необходимости циклически перебирать все мои элементы управления и отказываться от них всех в качестве первого респондента. Я предполагаю, что вопрос .. Как бы я получить текущий первый ответчик на клавиатуре?
objective-c
cocoa-touch
sdk
Seventoes
источник
источник
[[[UIApplication sharedApplication] keyWindow] endEditing:YES];
Ответы:
Пытаться:
источник
[self.view endEditing:YES];
значения BOOL - это ДА / НЕТ в Objective-C.Вы можете заставить текущее редактируемое представление изменить статус первого респондента с помощью
[view endEditing:YES]
. Это скрывает клавиатуру.В отличие от
-[UIResponder resignFirstResponder]
,-[UIView endEditing:]
будет искать через подпредставления, чтобы найти текущий первый респондент. Таким образом, вы можете отправить его на верхний уровень представления (например,self.view
вUIViewController
), и он будет делать правильные вещи.(Этот ответ ранее включал несколько других решений, которые также работали, но были более сложными, чем необходимо. Я удалил их, чтобы избежать путаницы.)
источник
[self.view endEditing:YES];
Ответ лучше.[UIView endediting:]
работает. В одном из приложений, которые я разработал, в UINavigationViewController было добавлено поле поиска, если вы просто вызовете его[self.view endEditing:YES]
какself
контроллер представления, это не будет работать, вместо этого я вызвал этот метод непосредственно в области просмотра, где было добавлено поле поиска, например:[self.mySearchBoxView endEditing:YES]
,Вы можете отправить нулевое целевое действие приложению, оно в любой момент подаст в отставку первому респонденту, не беспокоясь о том, какое представление в настоящее время имеет статус первого респондента.
Objective-C:
Swift 3.0:
Действия с нулевым таргетингом распространены в Mac OS X для команд меню, и вот их использование в iOS.
источник
Честно говоря, я не в восторге от любого решения, предложенного здесь. Я нашел хороший способ использовать TapGestureRecognizer, который, я думаю, доходит до сути вашей проблемы: когда вы нажимаете на что-либо, кроме клавиатуры, отклоняйте клавиатуру.
В viewDidLoad зарегистрируйтесь для получения уведомлений клавиатуры и создайте UITapGestureRecognizer:
Добавить клавиатуру показать / скрыть респондентов. Там вы добавляете и удаляете TapGestureRecognizer в UIView, который должен отпускать клавиатуру при нажатии. Примечание. Нет необходимости добавлять его во все вложенные представления или элементы управления.
TapGestureRecognizer будет вызывать вашу функцию, когда он получает нажатие, и вы можете отклонить клавиатуру следующим образом:
Хорошая особенность этого решения заключается в том, что оно фильтрует только касания, а не считывания. Поэтому, если у вас есть прокрутка контента над клавиатурой, пролистывание все равно будет прокручиваться и клавиатура будет отображаться. Удалив распознаватель жестов после того, как клавиатура исчезнет, будущие касания на вашем экране обрабатываются как обычно.
источник
Это решение, позволяющее убрать клавиатуру при попадании
return
в любое текстовое поле путем добавления кода в одном месте (поэтому не нужно добавлять обработчик для каждого текстового поля):рассмотрим этот сценарий:
У меня есть
viewcontroller
с двумя текстовыми полями (имя пользователя и пароль). иviewcontroller
реализуетUITextFieldDelegate
протоколя делаю это в viewDidLoad
и viewcontroller реализует необязательный метод как
и независимо от того, в каком текстовом поле вы находитесь, как только я нажму
return
на клавиатуре, оно будет отклонено!В вашем случае то же самое будет работать, если вы установите для всех делегатов текстового поля значение self и реализуете
textFieldShouldReturn
источник
Лучше всего, чтобы что-то «украло» статус первого респондента.
Поскольку UIApplication является подклассом UIResponder, вы можете попробовать:
В противном случае создайте новый UITextField с фреймом нулевого размера, добавьте его где-нибудь в представление и сделайте что-то подобное (переходите в отставку).
источник
Уберите это в некотором служебном классе.
источник
@ Николас Райли & @Kendall Helmstetter Geln & @cannyboy:
Абсолютно блестящий!
Спасибо.
Учитывая ваши советы и советы других в этой теме, вот что я сделал:
Как это выглядит при использовании:
[[self appDelegate] dismissKeyboard];
(примечание: я добавил appDelegate как дополнение к NSObject, чтобы я мог использовать где угодно и что угодно)Как это выглядит под капотом:
РЕДАКТИРОВАТЬ
Поправка к моему ответу включена
tempTextField.enabled = NO;
. Отключение текстового поля будет препятствоватьUIKeyboardWillShowNotification
иUIKeyboardWillHideNotification
клавиатуры уведомления от отправки вы должны полагаться на эти уведомления по всему приложению.источник
Быстрый совет о том, как отключить клавиатуру в iOS, когда пользователь касается любого места на экране за пределами UITextField или клавиатуры. Учитывая, сколько недвижимости может занять клавиатура iOS, имеет смысл предложить пользователям простой и интуитивно понятный способ отклонить клавиатуру.
Вот ссылка
источник
Здесь много слишком сложных ответов, возможно, потому, что это не так легко найти в документации iOS. Иосиф-Х имел это прямо выше:
источник
Даже проще, чем ответ Мигар
перезапись
touchesBegan:withEvent:
Это будет,
dismiss the keyboard
когда вы касаетесь в любом местеbackground
.источник
Вот что я использую в своем коде. Работает как часы!
В yourviewcontroller.h добавьте:
@property (nonatomic) UITapGestureRecognizer *tapRecognizer;
Теперь в .m файле добавьте это к вашей функции ViewDidLoad:
Также добавьте эту функцию в файл .m:
источник
В заголовочном файле контроллера вашего представления добавьте
<UITextFieldDelegate>
определение интерфейса вашего контроллера, чтобы он соответствовал протоколу делегата UITextField ...... В файле реализации контроллера (.m) добавьте следующий метод или код внутри него, если у вас уже есть метод viewDidLoad ...
... Затем свяжите yourTextBox с вашим фактическим текстовым полем
источник
Вы должны отправить
endEditing:
в рабочее окно, являющееся подклассомUIView
источник
Лучший способ отклонить клавиатуру из UITableView и UIScrollView:
источник
В Swift 3 вы можете сделать следующее
источник
Я думаю, что ответ Джереми не работал для меня, потому что у меня был стек навигации в виде вкладок с модальным диалогом поверх него. Я использую следующее прямо сейчас, и оно работает для меня, но ваш пробег может отличаться.
источник
Вам также может понадобиться переопределить UIViewController disablesAutomaticKeyboardDismissal, чтобы в некоторых случаях это работало. Это может быть сделано в UINavigationController, если он у вас есть.
источник
Подкласс ваши текстовые поля ... а также текстовые представления
В подклассе положить этот код ..
В текстовом поле делегаты (аналогично для делегатов textview)
Все готово .. Теперь просто отправьте уведомление из любого места в вашем коде. Он подаст в отставку любую клавиатуру.
источник
И в кратчайшие сроки мы можем сделать
источник
Чтобы закрыть клавиатуру после ее появления, есть 2 случая :
когда UITextField находится внутри UIScrollView
когда UITextField находится вне UIScrollView
2. когда UITextField находится вне UIScrollView, переопределите метод в вашем подклассе UIViewController
Вы также должны добавить делегат для всех UITextView
чтобы создать IBAction, нажмите Ctrl + щелкните UITapGesture и перетащите его в .h файл viewcontroller.
Здесь я назвал tappedEvent в качестве имени моего действия
приведенная выше информация была получена по следующей ссылке, пожалуйста, обратитесь за дополнительной информацией или свяжитесь со мной, если вы не понимаете данные выше.
http://samwize.com/2014/03/27/dismiss-keyboard-when-tap-outside-a-uitextfield-slash-uitextview/
источник
Я ненавижу, что не существует "глобального" способа программно закрыть клавиатуру без использования вызовов частного API. Зачастую мне нужно программно отключать клавиатуру, не зная, какой объект является первым респондентом. Я прибег к проверке
self
использования API времени выполнения Objective C, перечисляя все его свойства, вытаскивая те, которые имеют типUITextField
, и отправляя имresignFirstResponder
сообщение.Это не должно быть так сложно сделать ...
источник
Это не красиво, но то, как я оставляю firstResponder, когда я не знаю, что это за ответчик:
Создайте UITextField, либо в IB, либо программно. Сделать это скрытым Свяжите это с вашим кодом, если вы сделали это в IB. Затем, когда вы хотите отклонить клавиатуру, вы переключаете респондент в невидимое текстовое поле и немедленно отмените его:
источник
Вы можете рекурсивно перебирать подпредставления, сохранять массив всех UITextFields, а затем перебирать их и переупорядочивать их все.
Не очень хорошее решение, особенно если у вас много подпредставлений, но для простых приложений это должно сработать.
Я решил эту проблему гораздо более сложным, но гораздо более производительным способом, но с помощью синглтона / менеджера для механизма анимации моего приложения, и каждый раз, когда текстовое поле становилось отвечающим, я назначал его статическому элементу, который получал бы подметил (подал в отставку) на основе некоторых других событий ... это почти невозможно для меня объяснить в параграфе.
Будьте изобретательны, мне понадобилось всего 10 минут, чтобы обдумать это для моего приложения после того, как я нашел этот вопрос.
источник
Немного более надежный метод, который мне нужно было использовать недавно:
Я обнаружил, что некоторые другие «глобальные» методы не работают (например,
UIWebView
&WKWebView
отказался уйти в отставку).источник
Добавьте к вашему представлению A Recognizer Gesture Recognizer. И определите его ibaction
ваш .m файл будет похож
Это работает для меня
источник
Да, endEditing - лучший вариант. А в iOW 7.0
UIScrollView
есть классная функция, позволяющая отключать клавиатуру при взаимодействии с видом прокрутки. Для достижения этого вы можете установитьkeyboardDismissMode
свойствоUIScrollView
.Установите режим отклонения клавиатуры как:
У него есть несколько других типов. Посмотрите на этот яблочный документ .
источник
В скором времени:
источник
самый простой способ - вызвать метод
источник
Вы должны использовать один из этих методов,
или
источник