ipad / iphone: скрыть клавиатуру, когда пользователь нажимает в любом месте экрана - PullRequest
2 голосов
/ 11 марта 2011

У меня есть ситуация,

У меня есть какая-то панель поиска на том же экране, когда я нажимаю на панели поиска появляется клавиатура.Теперь возможно, что эта клавиатура исчезнет, ​​если мы щелкнем где-нибудь еще на экране.

Пожалуйста, помогите мне с этим.

Спасибо заранее.

Ответы [ 7 ]

7 голосов
/ 30 июля 2013

Вот довольно элегантное решение этой задачи:

- (void)viewDidLoad
{
    [super viewDidLoad];
    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboard)];
    [self.view addGestureRecognizer:tap];
}
- (void)dismissKeyboard
{
   [searchBar resignFirstResponder];
}
1 голос
/ 11 марта 2011
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

// dismiss keyboard through `resignFirstResponder`

}
0 голосов
/ 28 ноября 2012
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch * touch = [touches anyObject];
    if(touch.phase == UITouchPhaseBegan) {
        [self.myTextField resignFirstResponder];
    }
}
0 голосов
/ 11 марта 2011

Когда вы нажимаете на панель поиска, она получает фокус и становится первым респондентом. Итак, проблема в том, когда освободить фокус методом resignFirstResponder. Как правило, я делаю прозрачную кнопку спереди для обнаружения любого прикосновения к экрану, исключая панель поиска. Или вы можете зарегистрировать распознаватель жестов для получения события касания и отпускания фокуса клавиатуры.

О распознавателе жестов вы можете обратиться к этой ссылке о UIGestureRecognizer. Это доступно в iOS 3.2 и позже. Итак, приложение для iPad может использовать такие классы.

0 голосов
/ 11 марта 2011

решение здесь

http://www.mobisoftinfotech.com/blog/iphone/iphone-uitextfield-tutorial-handling-keyboard-interactions/

для tableView вы можете все тот же метод в методе didSelectRow

0 голосов
/ 11 марта 2011

Чтобы расширить то, что сказали AlBlue и 7KV7, обычно у вас есть некоторый UIView, над которым всплывает клавиатура, и, как правило, можно щелкнуть по нему, чтобы «убрать фокус» из поля ввода.Т.е. более сложно выявлять клики «везде вне поля и всплывающих окон клавиатуры», например, на панели инструментов или на панели навигации, где есть поле, кнопка в виде таблицы и т. Д.

Поэтому, чтобы избежать обработки каких-либо представленийкоторые могут «поглотить» прикосновения, которые могут быть на вашем UIView, лучшим способом может быть добавление прозрачного представления вертикально над всплывающей клавиатурой в окно вашего приложения.

Если у вас есть прокрутка, сделайте что-то вродеэто (вставленный рабочий код), поскольку кажется, что scrollview специально не вызывает touchesBegan.

-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
    UITextField *tfCount=(UITextField *)[self.view viewWithTag:335];
    [tfCount resignFirstResponder]; 
}

Удобно пометить представление поля ввода, если вы не сохраните ссылку на него.

0 голосов
/ 11 марта 2011

Вам необходимо поле пользовательского интерфейса, чтобы оставить статус первого респондента, чтобы закрыть клавиатуру.

[field resignFirstResponder];
...