22

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

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

谢谢。

[更新]看起来我的代码有问题,因为 resignFirstResponder 确实有效(我做了一个简单的测试用例而不是使用我的代码)。但我仍然不知道问题是什么。

4

5 回答 5

34

显然,在 iOS 4.3 中有一个新-[UIViewController disablesAutomaticKeyboardDismissal]方法可以覆盖来解决这个问题。

于 2011-01-12T23:01:44.410 回答
14

这是因为我使用的是 UIModalPresentationFormSheet。所有其他的都按预期工作......浪费了几个小时。

于 2010-05-04T02:19:09.123 回答
5

这是一个非常痛苦的发现。似乎是 iOS 中较差的 API 设计之一。非常感谢@0xced 和@manicaesar 的答案。

这是我为那些被困在墙上敲打的未来开发者的综合答案。

如果它是单个视图控制器,只需覆盖disablesAutomaticKeyboardDismissal并返回 NO。

如果它是模式中的导航控制器,请创建自己的 UINavigationController 子类,如下所示:

在.h...

@interface MyNavigationController : UINavigationController

@结尾

在....

@implementation 我的导航控制器


#pragma 标记 -
#pragma 标记 UIViewController
- (BOOL)disablesAutomaticKeyboardDismissal {
    返回否;
}

@结尾

在显示模态视图控制器的代码中。

UIViewController *someViewController = [[UIViewController alloc] init];

MyNavigationController *navController = [[MyNavigationController alloc] initWithRootViewController:someViewController];

navController.modalPresentationStyle = UIModalPresentationFormSheet;
navController.modalTransitionStyle = UIModalTransitionStyleFlipHorizo​​ntal;
[self presentModalViewController:navController Animation:YES];

于 2013-01-31T05:48:27.743 回答
3

我刚刚确认问题确实是 UIModalPresentationFormSheet 并向苹果 rdar://8084017 提交了错误报告

于 2010-06-11T17:51:42.667 回答
3

我通过调整 UIModalPresentationPageSheet 的大小解决了这个问题。在这里查看我的答案。

于 2010-12-15T22:51:50.547 回答