我遇到的问题是,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 :(得分: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状态,键盘将在下一个视图中保留在屏幕上。
的更多详情答案 4 :(得分:0)
我通过调整UIModalPresentationPageSheet的大小来解决这个问题。请参阅我的回答here。
答案 5 :(得分:0)
{7}在iOS 7上拒绝为我工作。
但是......我设法通过禁用屏幕上的UITextFields来解决这个问题。
我的解决方案描述为here。
这种解决方法甚至适用于Modal disablesAutomaticKeyboardDismissal
s。