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

Cal*_*Cal 22 iphone objective-c uinavigationcontroller ipad modalviewcontroller

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

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

谢谢.

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

0xc*_*ced 34

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

  • @morais如果你在navigationController中展示你的视图控制器,你必须继承UINavigationController并在那里实现该方法. (23认同)
  • 神圣的废话,manicaesar,需要在"完全没有记录的废话,导致开发人员撕掉他们的头发"的大厅里凿刻,让所有人都能看到.谢谢! (2认同)

Cal*_*Cal 14

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


Jar*_*gan 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];