这是一个非常痛苦的发现。似乎是 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 = UIModalTransitionStyleFlipHorizontal;
[self presentModalViewController:navController Animation:YES];