【问题标题】:iOS form sheet keyboard does not disappeariOS 表单键盘不会消失
【发布时间】:2025-11-22 12:35:01
【问题描述】:

我知道我必须打电话

- (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,这解决了问题,但我仍然想知道如何在不创建导航控制器类的情况下做到这一点。

欢迎任何意见......

【问题讨论】:

  • 请问您是如何在视图控制器中实现 disablesAutomaticKeyboardDismissal 的?
  • @user2176995 如果您的表单根目录是导航控制器,则必须将- (BOOL)disablesAutomaticKeyboardDismissal { return NO; } 放入navigation controller's .m 文件中,否则只需将代码放入您的viewcontrollers.m 文件中
  • 如果我创建了一个 uiNavigationController 的子类,将方法添加到其中,然后将故事板中导航控制器的子类设置为自定义导航控制器类,它会起作用吗?在实现该方法后,我通过真正的第一响应者隐藏键盘是吗?
  • 没错。你需要在表单控制器中调用`resignFirstResponder`
  • 我试过了,还是不行:(

标签: ios objective-c uinavigationcontroller uitextview


【解决方案1】:

你能不能试试下面的代码;

- (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];
}

【讨论】:

    【解决方案2】:

    以下代码对我有用:

    @interface UINavigationController (dismissKeyBoard)
    
    @end
    
    @implementation UINavigationController (dismissKeyBoard)
    
    - (BOOL)disablesAutomaticKeyboardDismissal
    {
        return NO;
    }
    
    @end
    

    【讨论】: