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

11 浏览
0 Comments

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

我试图从模态视图控制器中隐藏iPad键盘,但是没有成功。我尝试了resignFirstResponder,但是在模态视图控制器中没有任何效果。我在非模态的UINavigationController中使用相同的UIViewController尝试了resignFirstResponder,键盘成功隐藏了。

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

谢谢。

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

0
0 Comments

这是一个非常困扰的问题。在iOS中,这似乎是API设计中较差的部分之一。非常感谢回答问题的用户和用户提供的答案。

以下是我整理的解决方法,供将来遇到同样问题的开发者参考。如果是单个视图控制器,只需重写disablesAutomaticKeyboardDismissal方法并返回NO。如果是在模态中的导航控制器,可以创建自己的UINavigationController子类来解决问题。

在.h文件中:

MyNavigationController : UINavigationController

在.m文件中:

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

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

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

以上就是解决这个问题的方法。希望能对遇到类似问题的开发者有所帮助。

0
0 Comments

问题出现的原因是使用了UIModalPresentationFormSheet模式。其他模式都能按预期工作,只有这个模式出现问题。花了几个小时才找到问题所在。

我也遇到了完全相同的问题,这是UIModalPresentationFormSheet的一个bug吗?

我猜他们认为如果你正在进行表单输入,你就不会想隐藏键盘... 在我的情况下,我最终将它更改为非模态视图控制器。

0
0 Comments

问题的原因是在iOS 4.3中,无法通过重写-[UIViewController disablesAutomaticKeyboardDismissal]方法来解决键盘无法隐藏的问题。即使已经在模态视图控制器中实现了这个方法,键盘仍然保持打开状态。有人建议,如果你在导航控制器中呈现了视图控制器,你需要继承UINavigationController并在那里实现这个方法。其他人对此感到惊讶,并赞扬这个方法的帮助。还有人认为,应该在实际呈现的视图控制器中实现这个方法,而不是在其任何子视图控制器中实现。最后,有人在评论中表示同意这个观点。

解决方法是在导航控制器中实现-[UIViewController disablesAutomaticKeyboardDismissal]方法。以下是解决方法的示例代码:

@interface MyNavigationController : UINavigationController

@end

@implementation MyNavigationController

- (BOOL)disablesAutomaticKeyboardDismissal {

return YES;

}

@end

通过继承UINavigationController并在其中实现disablesAutomaticKeyboardDismissal方法,可以解决键盘无法隐藏的问题。

0