как скрыть клавиатуру при касании пустой области на iphone - PullRequest
71 голосов
/ 30 апреля 2009

обычно, когда вы касаетесь области ввода текста, клавиатура всплывает, а когда вы касаетесь пустой области экрана, клавиатура исчезает. Как это сделать?

точно так же, как мы испытали на сафари на iphone ...

Спасибо

Ответы [ 11 ]

115 голосов
/ 30 апреля 2009

Обновлен способ (рекомендуется):

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{
   [self.view endEditing:YES];
}

Это завершит редактирование всех подпредставлений и подаст в отставку первого респондента.

Другой способ (перечисление по всем текстовым представлениям):

Вот пошаговая инструкция:

Добавьте IBAction к вашему контроллеру представления, например - (IBAction) backgroundTouch: (id) sender

В действии backgroundTouch вам необходимо отправить сообщение resignFirstResponder всем текстовым полям вашего представления. Это прискорбно, но необходимо, поскольку в настоящее время нет способа извлечь объект, который в данный момент имеет статус FirstResponder. Это должно выглядеть примерно так:

- (IBAction)backgroundTouch:(id)sender {
  [someTextBox resignFirstResponder];
  [anotherTextBox resignFirstResponder];
}

Добавьте элемент управления кнопки в представление, измените его размер, чтобы он охватывал всю видимую область (за исключением строки состояния или любых вкладок или контроллеров навигации). Нажмите кнопку, затем перейдите в меню «Макет» и выберите «Отправить назад». Также установите для кнопки тип «Пользовательский», который невидим, если вы не указали для него какой-либо код для рисования.

Соедините событие Touch Up Inside кнопки с действием backgroundTouch: и попробуйте его.

73 голосов
/ 08 марта 2012

Используйте это простое решение

Для Swift 4:

   override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        self.view.endEditing(true)
   }

Для Swift 2:

    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
        self.view.endEditing(true)
    }

Для цели C:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{
   [self.view endEditing:YES];
}  

Работает с UITextField, UITextView и всеми подпредставлениями.

16 голосов
/ 19 ноября 2011

Забудьте о размещении кнопки в фоновом режиме, там простое решение

(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    [self.textfieldName resignFirstResponder];
}
4 голосов
/ 27 декабря 2011

Для> iOS 4.0 есть другое решение (а может и лучше) С помощью этого кода, нажмите в любом месте, чтобы скрыть клавиатуру.

// single tap to resign keyboard
UITapGestureRecognizer *singleTapRecognizer = [[UITapGestureRecognizer alloc] initWithBlock:^(UIGestureRecognizer *rec){
            [input_text resignFirstResponder];
        }];
self.singleTapRecognizer.numberOfTapsRequired = 1;
self.singleTapRecognizer.cancelsTouchesInView = NO;
[self.view addGestureRecognizer:singleTapRecognizer];
4 голосов
/ 29 июля 2009

есть учебник по этой проблеме (также касающийся цифровой клавиатуры без клавиши DONE) над здесь

2 голосов
/ 30 апреля 2009

Отправить resignFirstResponder на управление.

1 голос
/ 02 февраля 2015

Следующий код отлично работает с проектом xamarin iOS:

public override void TouchesBegan (NSSet touches, UIEvent evt){
    View.EndEditing (true);
}
1 голос
/ 05 августа 2014

Вы можете сделать это также

Скрыть клавиатуру, касаясь фона в поле зрения

- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    [[self view] endEditing:YES];
}
0 голосов
/ 13 июня 2015

Это решение должно работать нормально, если вы работаете с swift и iOS 8/9:

    override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
         self.view.endEditing(true)
    }
0 голосов
/ 12 июля 2012

Я не смог скомпилировать ответ Вэла выше, используя селектор initWithBlock:

Этот код работает для меня. Добавьте это к методу, определяющему представление - обратите внимание, что мое представление составлено, а подпредставление, на которое я хочу ответить на одно касание, - 'chatView'. Представление поля ввода, использующее клавиатуру, называется chatInput.

    // single tap to resign (hide) the keyboard
    UITapGestureRecognizer *singleTapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapFrom:)];
    singleTapRecognizer.numberOfTouchesRequired = 1;
    singleTapRecognizer.cancelsTouchesInView = NO;
    [chatContent addGestureRecognizer:singleTapRecognizer];

Затем добавьте метод обработки метчиков.

/**
 * Handles a recognized single tap gesture.
 */
- (void) handleTapFrom: (UITapGestureRecognizer *) recognizer {
    // hide the keyboard
    NSLog(@"hiding the keyboard");
    [chatInput resignFirstResponder]; 
}
...