如何从MODAL视图控制器隐藏iPad键盘?

时间:2010-05-04 01:25:49

标签: iphone objective-c ipad uinavigationcontroller modalviewcontroller

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

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

感谢。

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

5 个答案:

答案 0 :(得分:34)

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

答案 1 :(得分:14)

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

答案 2 :(得分: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];

答案 3 :(得分:3)

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

答案 4 :(得分:3)

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