如何在MODAL视图控制器中隐藏iPad键盘?
这是一个非常困扰的问题。在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];
以上就是解决这个问题的方法。希望能对遇到类似问题的开发者有所帮助。
问题的原因是在iOS 4.3中,无法通过重写-[UIViewController disablesAutomaticKeyboardDismissal]
方法来解决键盘无法隐藏的问题。即使已经在模态视图控制器中实现了这个方法,键盘仍然保持打开状态。有人建议,如果你在导航控制器中呈现了视图控制器,你需要继承UINavigationController并在那里实现这个方法。其他人对此感到惊讶,并赞扬这个方法的帮助。还有人认为,应该在实际呈现的视图控制器中实现这个方法,而不是在其任何子视图控制器中实现。最后,有人在评论中表示同意这个观点。
解决方法是在导航控制器中实现-[UIViewController disablesAutomaticKeyboardDismissal]
方法。以下是解决方法的示例代码:
@interface MyNavigationController : UINavigationController
@end
@implementation MyNavigationController
- (BOOL)disablesAutomaticKeyboardDismissal {
return YES;
}
@end
通过继承UINavigationController并在其中实现disablesAutomaticKeyboardDismissal
方法,可以解决键盘无法隐藏的问题。