Модальный диалог не пропускает клавиатуру - PullRequest
41 голосов
/ 11 июня 2010

Я сталкиваюсь с проблемой, когда клавиатура не отключается при выходе из UITextField или UITextView в UIModalPresentationFormSheet. Кроме того, я создал большую кнопку, которая будет служить фоном представления, поэтому, если пользователь нажимает за пределами полей, он срабатывает. Я использую тот же код в обычном контроллере представления, и он работает как ожидалось. В контроллере модального вида это ничего не делает. Любые предложения будут оценены.

- (BOOL)textFieldShouldReturn:(id)sender {  
 [titleTextField resignFirstResponder];
 return YES;
}

- (BOOL)textViewShouldReturn:(id)sender {  
 [synopsisTextView resignFirstResponder];
 return YES;
}

- (IBAction)textFieldDoneEditing:(id)sender {  
 [sender resignFirstResponder];
} 

- (IBAction)textViewDoneEditing:(id)sender {  
 [sender resignFirstResponder];
} 

- (IBAction)backgroundClick:(id)sender {  
 [titleTextField resignFirstResponder];
 [synopsisTextView resignFirstResponder];
}

Ответы [ 6 ]

119 голосов
/ 07 июня 2011

Переопределение disablesAutomaticKeyboardDismissal для возврата НЕТ, как показано ниже, решило ту же проблему, что и у меня.Вам следует поместить этот код в контроллер представления, с которого вы запускаете клавиатуру:

- (BOOL)disablesAutomaticKeyboardDismissal {
    return NO;
}

Также, проверьте этот вопрос SO , если хотите получить подробное объяснение.

50 голосов
/ 09 мая 2012

Для тех, у кого проблемы с UINavigationController, я думаю, что есть лучшее решение, чем категория на UIViewController. Мы должны изменить поведение UINavigationController, чтобы задать topViewController (по моему мнению, именно так все ViewController контейнеры должны обрабатывать это).

@implementation UINavigationController (DelegateAutomaticDismissKeyboard)
- (BOOL)disablesAutomaticKeyboardDismissal {
    return [self.topViewController disablesAutomaticKeyboardDismissal];
}
3 голосов
/ 02 августа 2010

Если вы представляете модальное представление со «таблицей форм» в стиле презентации, Apple, очевидно, не отмахивается от клавиатуры, думая, что они не хотят, чтобы клавиатура вставала и выходила там, где пользователь будет делать многоредактирование (то есть "формы").Исправление будет состоять в том, чтобы изменить стиль презентации или жить с ним.

1 голос
/ 07 мая 2016

Если вы реализуете протокол UITextFieldDelegate, вы можете непреднамеренно вызвать это поведение, если выполняете проверку текста. Если ваши коды проверки возвращают значение false из textFieldShouldEndEditing, когда текст недействителен, поле не может отказаться от своего статуса firstResponder, и клавиатура останется на экране в следующем представлении.

Подробнее на Клавиатура UITextField не исчезнет. Нет, действительно

0 голосов
/ 22 апреля 2014

disablesAutomaticKeyboardDismissal отказался работать для меня на iOS 7.

Но ... Мне удалось решить эту проблему, просто отключив поля UITextFields на экране.

Мое решение описано здесь .

Этот обходной путь работает даже на модальных UIViewController с.

Да ... меня это тоже удивило !!

0 голосов
/ 16 декабря 2010

Я решил эту проблему, изменив размер UIModalPresentationPageSheet.Смотрите мой ответ здесь .

...