Скрыть клавиатуру, когда пользователь коснется uiview
У меня есть UIView с несколькими текстовыми полями. Теперь я использовал делегатов для изменения ответчика из текстового поля в другое. В этом случае моя клавиатура исчезает, когда пользователь переходит в последнее текстовое поле.
но теперь я хочу скрыть свою клавиатуру, когда пользователь коснется UIView (касается любого места на экране, кроме текстовых полей). Может ли кто-нибудь помочь мне в этом.
Спасибо
Ответы
Ответ 1
Используйте resignFirstResponder в touchhesBegan, например:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch * touch = [touches anyObject];
if(touch.phase == UITouchPhaseBegan) {
[self.myTextField resignFirstResponder];
}
}
Вам может потребоваться вызвать это в нескольких текстовых полях, если вы не знаете, где находится фокус; Я не тестировал этот случай.
Кроме того, в Interface Builder вам необходимо включить флажок "Взаимодействие с пользователем" для представления или программно использовать:
myView.userInteractionEnabled = YES;
Ответ 2
Просто позвоните в контроллер своего вида, если вы хотите скрыть клавиатуру.
[self.view endEditing:NO];
Ответ 3
Я использую
-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
UITouch *touch = [touches anyObject];
if(touch.phase==UITouchPhaseBegan){
//find first response view
for (UIView *view in [self.view subviews]) {
if ([view isFirstResponder]) {
[view resignFirstResponder];
break;
}
}
}
}
Ответ 4
Согласно "Начало разработки iPhone" , вы нажимаете кнопку круглого прямоугольника, чтобы он охватывал весь пользовательский интерфейс; полный экран. Затем перейдите в меню Макет и нажмите Отправить в Назад. Затем в инспекторе измените тип кнопки с круглый прямоугольник на Пользовательский. Теперь добавьте касание внутри события к этой кнопке и прикрепите его к методу, который его обрабатывает. Внутри этого метода убедитесь, что у вас есть инструкции:
[myTextFieldOne resignFirstResponder];
[myTextFieldTwo resignFirstResponder];
В принципе отправьте сообщение resignFirstResponder
в каждое из ваших текстовых полей или в любое поле, которое может создать клавиатуру.
На самом деле я действительно новичок в iPhone SDK. Я не знаю, является ли это лучшим методом, но он работает, и это то, что я узнал из вышеупомянутой книги. Надеюсь, что это поможет.
Ответ 5
Самый простой способ сделать это - работать над тем, что сказал PCheese.
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch * touch = [touches anyObject];
if(touch.phase == UITouchPhaseBegan) {
[self.view endEditing:YES];
}
}
Я ранее использовал [self.view endEditing:YES];
для события кнопки, но в сочетании с предыдущим ответом он работает. Намного легче, и вам не нужно ничего делать - просто поместите его в свой .m файл. Кроме того, это работает со всеми (по крайней мере, насколько я видел) текстовыми полями (работает для UITextField и UITextView).
Я знаю, что OP, вероятно, пока не понадобится, но я просто хочу поделиться им с другими с той же проблемой.
Ответ 6
Спасибо Блаенк, я пытался разобраться, как это сделать, и не понимал, что могу положить кнопку в фоновом режиме, хороший трюк! Здесь мой вклад (новый для этого сайта и Cocoa Touch, поэтому он может быть не самым надежным кодом, но он работает до сих пор...):
Я вызываю этот метод из события touchUpInside
на моем UIButton:
-(void)closeKeyboard:(id)sender {
UIView *theFirstResponder = [self findFirstResponder];
if (theFirstResponder) {
[theFirstResponder resignFirstResponder];
}
}
Где этот цикл находит первыйResponder:
- (UIView *)findFirstResponder {
UIView *firstResponderView = nil;
for (UIView *view in [self entryFields]) {
if ([view isFirstResponder]) {
firstResponderView = view;
break;
}
}
return firstResponderView;
}
Он зависит от каждого из элементов управления UITextField
в представлении, имеющем назначенный им тег (опять же, это можно сделать в Interface Builder).
Мои два цента в любом случае, хотя мне лучше дать что-то обратно!
Ответ 7
SO я мучился над этим, и я понял это.
вам не нужна другая кнопка или что-то еще.
Все, что вам нужно сделать, это выбрать "Владелец файлов", в инспекторе перетащите его из своей текстовой панели (или как вы ее назвали) в свое фактическое текстовое поле (через то, что вы назвали его). Это будет в дополнение к любым входам, которые вы уже подключен.
и, конечно же, в дополнение к Контрольной розетке (UIview изменен на UIControl через инспектор) владельцам файлов через backgroundtouched... первое, что мы все пробовали
Ответ 8
Измените класс UIView на класс UIControl со вкладки идентификации инспектора.
Добавьте это:
- (IBAction)tabBackground:(id) sender;
в ваш .h файл.
Добавьте это в свой .m файл:
- (IBAction)tabBackgroup:(id) sender {
[nameField resignFirstRespnder];
[numberField resignFirstResponder];
}
Подключите ваш tabBackground к инспектору, полученному участку действия, к UIView (который является UIControl), и вам хорошо идти.
Ответ 9
Наиболее подходящим способом решения этой проблемы является использование следующего метода:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
if(![touch.view isMemberOfClass:[UITextField class]]) {
[touch.view endEditing:YES];
}
}
Примечание. Это не работает в экземплярах UIScrollView.
Ответ 10
он работает для меня
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[self.view endEditing:NO];
}
нужно только в self.view иметь UItextField
http://objdev.com/2013/11/Dismissing-iOS-Keyboard-Self-View-EndEditing