模式对话框不会消除键盘

我遇到了一个问题,在UIModalPresentationFormSheet留下UITextFieldUITextView时,键盘不会被解散。 另外,我已经创build了一个大的button来作为视图的背景,所以如果用户在触发的字段之外轻击。 我在常规的视图控制器中使用相同的代码,并按预期工作。 在模态视图控制器中,它什么都不做。 任何build议,将不胜感激。

 - (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]; } 

覆盖disablesAutomaticKeyboardDismissal返回NO如下固定我的同样的问题。 你应该把这个代码放到你的视图控制器中,从中你启动键盘:

 - (BOOL)disablesAutomaticKeyboardDismissal { return NO; } 

另外,如果你想得到一个详细的解释,检查这个SO问题。

对于那些有UINavigationController麻烦,我认为有一个比UIViewController类别更好的解决scheme。 我们应该改变UINavigationController的行为来询问它的topViewController (在我看来,这是所有ViewController容器应该如何处理的)。

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

如果您用演示风格“表单”来呈现模态视图,那么苹果公司显然不会放弃键盘,认为他们不希望键盘跳入和跳出用户将进行大量编辑的位置。 “forms”)。 解决办法是改变演示风格或与之共存。

我通过调整UIModalPresentationPageSheet来解决这个问题。 在这里看到我的答案。

disablesAutomaticKeyboardDismissal拒绝为我在iOS 7上工作。

但是…我设法通过简单地禁用屏幕上的UITextFields来解决这个问题。

这里描述我的解决scheme。

这种解决方法甚至适用于Modal UIViewController

是的,这让我感到惊讶!

如果您实现UITextFieldDelegate协议,则可能会在执行文本validation时无意中导致此行为。 如果您的validation码在文本无效时从textFieldShouldEndEditing返回false,则该字段不能放弃它的firstResponder状态,并且键盘将在下一个视图中保留在屏幕上。

在UITextField的键盘上的更多细节不会消失。 不完全是