模态对话框不会关闭键盘

时间:2010-06-11 01:49:43

标签: ios ipad uimodalpresentationformsh

我遇到的问题是,UITextFieldUITextView离开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 个答案:

答案 0 :(得分:119)

覆盖disablesAutomaticKeyboardDismissal以返回NO,如下所示修复了我的同样问题。您应该将此代码放入视图控制器,从中启动键盘:

- (BOOL)disablesAutomaticKeyboardDismissal {
    return NO;
}

另外,如果您想获得详细说明,请查看此SO问题。

答案 1 :(得分:50)

对于那些遇到UINavigationController问题的人,我认为有一个比UIViewController上的类别更好的解决方案。我们应该更改UINavigationController的行为以询问其topViewController(在我看来,这是所有ViewController容器应该如何处理此问题。)

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

答案 2 :(得分:3)

如果您正在使用演示文稿样式“表单”呈现模式视图,Apple显然不会忽略键盘,认为他们不希望键盘跳入和跳出用户将执行大量操作的位置编辑(即“表格”)。修复方法是改变演示风格或与之共存。

答案 3 :(得分:1)

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

UITextField's keyboard won't dismiss. No, really

的更多详情

答案 4 :(得分:0)

我通过调整UIModalPresentationPageSheet的大小来解决这个问题。请参阅我的回答here

答案 5 :(得分:0)

{7}在iOS 7上拒绝为我工作。

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

我的解决方案描述为here

这种解决方法甚至适用于Modal disablesAutomaticKeyboardDismissal s。

是的......它让我感到惊讶!!