Сокрытие клавиатуры - PullRequest
       23

Сокрытие клавиатуры

0 голосов
/ 14 января 2009

У меня есть UISearchBar и в методе делегата я скрываю клавиатуру, когда текстовое поле очищено:

- (void)searchBar:(UISearchBar *)filterBar textDidChange:(NSString *)filterText {
    NSLog(@"filter: %@", filterText);

    if ([filterText length] == 0) {
        NSLog(@"hiding keyboard");
        [filterBar resignFirstResponder ];

Теперь, когда я использую кнопку возврата, чтобы убрать поисковый запрос, все хорошо. Клавиатура скрывается, когда поиск становится пустым. Не так, когда я нажимаю кнопку «крестик», чтобы полностью очистить поле поиска.

Ну, не совсем так. Я вызываю resignFirstResponder и скрываю клавиатуру - вы просто не можете ее увидеть, потому что она возвращается обратно. Я узнал об этом, наблюдая за событиями шоу / скрытия клавиатуры.

Так почему же клавиатура снова отображается? Как я могу предотвратить это?

Я уже пытался пройтись по всем подпредставлениям UISearchBar , а также вызвать resignFirstResponder на этих ... но если я не сделал что-то не так - это тоже не решит .

Обновление:

На самом деле я только что получил клавиатуру, чтобы не отключать кнопку «Готово» :-D ... поэтому я «перестану» идти по этому пути, как предложил Кевин. Тем не менее, я хотел бы знать, почему клавиатура снова появилась.

Ответы [ 4 ]

1 голос
/ 24 июля 2009

Я вижу, что вы приняли ответ и не планируете продолжать в том же духе, но мне мне интересно, можно ли добиться чего-то такого, чего вы хотели, реализовав это:

- (BOOL)canBecomeFirstResponder
{
   return !preventingKeyboardAppearance; // so to speak
}

- (void)searchBar:(UISearchBar *)filterBar textDidChange:(NSString *)filterText 
{
   // handle text

   preventingKeyboardAppearance = YES;
   [filterBar resignFirstResponder];
}

Мне непонятно, при каких обстоятельствах вы можете установить предотвращение возврата ключа к значению НЕТ, но мне интересно, сработает ли это.

1 голос
/ 14 января 2009

Я бы предложил вам прекратить , пытаясь это сделать. Скрывать клавиатуру, когда поле очищается, совершенно нестандартное поведение, и пользователь этого не ожидает. В подобных ситуациях гораздо лучше поддерживать поведение в соответствии со всеми остальными приложениями в системе.

0 голосов
/ 18 августа 2012
-(BOOL)textFieldShouldReturn:(UITextField *)textField {
        [textField resignFirstResponder];

        return YES;    
    }

[textField resignFirstResponder] некоторое время не работает, поэтому используйте это
[YorTextFieldName resignFirstResponder] он работает правильно, не любой другой функция для скрытия клавиатуры

0 голосов
/ 14 января 2009

Я в основном согласен с Кевином, но это вам не поможет, вот так:

Попробуйте перебрать подпредставления панели поиска и найти родного брата класса UITextField. Затем либо установите свойство делегата этого текстового поля для класса вашего ViewController и обработайте обратный вызов там (например, textViewShouldReturn), либо просто вызовите resignFirstResponder непосредственно в текстовом поле. Первое очевидно должно быть сделано во время инициализации / загрузки, в то время как второе может быть сделано в вашем существующем обратном вызове textDidChange.

Вот еще несколько указателей:

http://discussions.apple.com/thread.jspa?threadID=1479468&tstart=0 http://discussions.apple.com/thread.jspa?messageID=8176608

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...