2010-06-11 1 views
41

Я столкнулся с проблемой, когда клавиатура не увольняется при выходе из 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]; 
} 
+0

Не знаю, если вы решили эту проблему, но я с аналогичной проблемой: http://stackoverflow.com/questions/3372333/ipad-keyboard-refuses-to-go- в пути – Kalle

ответ

119

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

- (BOOL)disablesAutomaticKeyboardDismissal { 
    return NO; 
} 

Кроме того, проверить этот SO вопрос, если вы хотите, чтобы получить подробное объяснение.

+0

Большое спасибо. Это решило для меня очень неприятную проблему! :) – DenVog

+0

рад помочь:] Я почти сходил с ума из-за этого! – aslisabanci

+0

Это работает, спасибо! Это так сложно. Как я могу это понять самостоятельно? ughhh !! – Hlung

3

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

+0

Да. Я использую UIModalPresentationFormSheet. Спасибо за эту информацию. – DenVog

+0

Раздражающе здесь, чтобы получить плавное исчезновение из ModalVC, вам нужно сначала анимировать клавиатуру. http://stackoverflow.com/questions/2898353/modal-view-controller-with-keyboard-on-landscape-ipad-changes-location-when-dismi –

+0

см. ответ @ctrahey выше, добавив категорию в UINavigationController. Решил это для меня. –

0

Я решил это, изменив размер UIModalPresentationPageSheet. См. Мой ответ here.

50

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

@implementation UINavigationController (DelegateAutomaticDismissKeyboard) 
- (BOOL)disablesAutomaticKeyboardDismissal { 
    return [self.topViewController disablesAutomaticKeyboardDismissal]; 
} 
+0

Хорошее предложение, спасло мне много горя! – jjxtra

+4

То же. Если бы я мог повышать 15 раз, я бы это сделал. –

+0

Он работает хорошо для UINavigationController. Благодаря! –

0

disablesAutomaticKeyboardDismissal отказался работать для меня на прошивке 7.

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

Мое решение описано here.

Это обходное решение даже работает на Modal UIViewController s.

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

0

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

Подробнее на UITextField's keyboard won't dismiss. No, really