如何从模态视图控制器中隐藏iPad键盘?

22

我正在尝试从模态视图控制器中隐藏iPad键盘,但这并不起作用。我已经尝试过resignFirstResponder,但如果我们在模态视图控制器中,那就没有任何影响。我在非模态UINavigationController中尝试了非常相同的UIViewController的resignFirstResponder,键盘可以正确隐藏。

有人知道如何解决这个问题吗?

谢谢。

[更新] 看起来我的代码有问题,因为resignFirstResponder确实起作用(我制作了一个简单的测试案例而不是使用我的代码)。但我仍然不知道问题出在哪里。


1
我在iPad模拟器中遇到了同样的问题,所以你不需要一个真实的设备 :) - Cal
哎呀,我浪费了几个小时在同一个问题上。 - CVertex
1
是的,这绝对是iOS 3.2的一个bug。我通过将loginForm.modalPresentationStyle = UIModalPresentationPageSheet改为而不是UIModalPresentationFormSheet来修复它。 - Eamonn Fallon
现在我们已经到了iOS 7.1和XCode 5.1...但这个问题仍然存在。不,改变“modalPresentationStyle”对我没有用。(沮丧的叹息。) - Mike Gledhill
5个回答

34

1
我已经在我的模态UIViewController上实现了这个方法,但它仍然保持着键盘打开。有什么想法吗?谢谢。 - morais
23
如果您在 navigationController 中呈现您的视图控制器,那么您需要子类化 UINavigationController 并在那里实现该方法。 - manicaesar
哇...这在文档中在哪里啊。manicaesar,你刚刚帮我省了好多工作。谢谢! - Jeremy White
2
天啊,manicaesar,这需要被刻在“完全没有记录的垃圾代码大厅”里,让所有人都看到。谢谢! - Morgan Harris
@manicaesar 我认为(尽管我没有测试过),更普遍的规则是你必须在实际被呈现的视图控制器中实现此方法,而不是在其任何子级中。因此,如果您正在模态下进行自定义视图控制器包含,则应在模态视图控制器层次结构的根视图控制器中覆盖此方法。 - Mark Amery
@MarkAmery - 是的,你是对的,这就是被评论回答的信息 ;) - manicaesar

14

之所以会出现这种情况,是因为我使用了UIModalPresentationFormSheet。其他的方式都可以正常工作...... 花费了好几个小时才发现。


我一直遇到完全相同的问题 - 这是UIModalPresentationFormSheet的一个错误吗? - davbryn
我猜他们认为如果你正在进行表单输入,你永远不会想隐藏键盘...在我的情况下,我最终将其更改为非模态视图控制器。 - Cal

5

找到这个问题真是太痛苦了。看起来是iOS中较差的API设计之一。非常感谢 @0xced 和 @manicaesar 的答案。

下面是我的综合回答,供未来遇到同样问题的开发人员参考。

如果仅涉及单个视图控制器,请重写disablesAutomaticKeyboardDismissal方法并返回NO。

如果是模态下的导航控制器,请创建自己的UINavigationController子类,例如:

.h文件中...

@interface MyNavigationController : UINavigationController

@end

.m文件中...

@implementation MyNavigationController

#pragma mark - #pragma mark UIViewController - (BOOL)disablesAutomaticKeyboardDismissal { return NO; }
@end

在显示模态视图控制器的代码中调用:

UIViewController *someViewController = [[UIViewController alloc] init];
MyNavigationController *navController = [[MyNavigationController alloc] initWithRootViewController:someViewController];
navController.modalPresentationStyle = UIModalPresentationFormSheet; navController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; [self presentModalViewController:navController animated:YES];

谢谢!这个修复帮了我很多。 - imike

3

我刚刚确认了这个问题确实与UIModalPresentationFormSheet有关,并向苹果提交了一个错误报告rdar://8084017


很遗憾我们必须等到iPad的4.0版本在“秋季”发布才能使用(无论那是什么时候)。 - Sam Soffes
请问,您收到了苹果关于您报告的错误的反馈吗? - hermos

3

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接