我知道我必须调用
- (BOOL)disablesAutomaticKeyboardDismissal {
return NO;
}
//this dismiss keyboard on ios
- (BOOL) textViewShouldBeginEditing:(UITextView *)textView {
[self.comments resignFirstResponder];
return YES;
}
为了消除表单表上的键盘,我还知道我必须在导航控制器中调用disablesAutomaticKeyboardDismissal
(如果我有一个)。
问题是:我以编程方式创建带有导航控制器的表单,如:
UIStoryboard* sb = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:[NSBundle mainBundle]];
SettingsViewController *settingsVC = [sb instantiateViewControllerWithIdentifier:@"settingsViewController"];
//add navigation controller
UINavigationController *modalViewNavController= [[UINavigationController alloc] initWithRootViewController:settingsVC];
modalViewNavController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
modalViewNavController.modalPresentationStyle = UIModalPresentationFormSheet;
[self presentModalViewController:modalViewNavController animated:YES];
我没有用于表单的导航控制器类,在这种情况下,我如何取消键盘呢?
我必须创建一个导航视图控制器吗?
更新 :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
最终在故事板中创建一个导航控制器并在导航控制器的视图控制器中调用disablesAutomaticKeyboardDismissal
,这解决了问题,但我仍然想知道如何在不创建导航控制器类的情况下做到这一点。
欢迎输入......
可以试试下面的代码吗?
- (void)viewDidLoad {
[super viewDidLoad];
UITapGestureRecognizer *gestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(hideKeyboard)];
gestureRecognizer.cancelsTouchesInView = NO;
[self.view addGestureRecognizer:gestureRecognizer];
}
- (void)hideKeyboard {
[self.view endEditing:YES];
}
下面的代码为我工作:
@interface UINavigationController (dismissKeyBoard)
@end
@implementation UINavigationController (dismissKeyBoard)
- (BOOL)disablesAutomaticKeyboardDismissal
{
return NO;
}
@end