触摸导航栏时隐藏键盘

问题描述 投票:0回答:5

我有一个UITabBarController有四个相关的观点。在其中一个视图中有一个文本视图,只为navigationbar留出空间:我想要做的是在触摸navigationbar时隐藏键盘。我怎样才能做到这一点?我应该覆盖touchesBegan:UINavigationBar方法吗?

编辑


我发现这样做的最好方法是添加一个UITapGestureRecognizer

UITapGestureRecognizer* tapRecon = [[UITapGestureRecognizer alloc]
                                    initWithTarget:self action:@selector(navigationBarTap:)];
tapRecon.numberOfTapsRequired = 1;
[self.navigationController.navigationBar addGestureRecognizer:tapRecon];

它调用方法

- (void)navigationBarTap:(UIGestureRecognizer*)recognizer { 
     [self.view endEditing:YES]; 
}
ios
5个回答
2
投票
UITapGestureRecognizer* tapRecon = [[UITapGestureRecognizer alloc]
                                    initWithTarget:self action:@selector(navigationBarTap:)];
tapRecon.numberOfTapsRequired = 1;
[self.navigationController.navigationBar addGestureRecognizer:tapRecon];


- (void)navigationBarTap:(UIGestureRecognizer*)recognizer {
     [self.view endEditing:YES];

    // OR

    for (id view in self.view.subviews) {
        if ([view isKindOfClass:[UITextView class]] || [view isKindOfClass:[UITextField class]]) {
            [view resignFirstResponder];
        }
    }
}

愿这会对你有所帮助


0
投票

在你的touchesBegan方法中,你可以使用resignFirstResponder来使键盘消失。希望这会有所帮助,为吉姆欢呼。


0
投票

//此方法将在导航到其他视图之前调用...

-(void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:YES];
    [yourTextField resignFirstResponder];
}

//这将在导航到其他屏幕之前重新设置键盘..

我希望这能帮到您。


0
投票

未经测试。将敲击手势添加到UINavigationbar并添加动作以停止响应者。

 UITapGestureRecognizer *gestureRecognizer=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(hideKeyboard)];
    gestureRecognizer.numberOfTapsRequired=1;
    gestureRecognizer.cancelsTouchesInView = NO;
    [UInavigationbar addGestureRecognizer:gestureRecognizer];
    [gestureRecognizer release];

行动:

[Textfield resignfirstresponder]

0
投票

您可以使用此快速扩展程序在外部单击时关闭键盘。可以在导航栏或视图控制器视图上单击用户。

只需在UIViewController中调用一次hideKeyboardWhenTappedAround()

extension UIViewController {
    func hideKeyboardWhenTappedOutsides() {
       let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(UIViewController.dismissKeyboard(_:)))
       tap.cancelsTouchesInView = false
       // On viewcontroller view
       view.addGestureRecognizer(tap)
       // On navigationcontroller view
       self.navigationController?.view.addGestureRecognizer(tap)
}

@objc func dismissKeyboard(_ sender: UITapGestureRecognizer) {
    view.endEditing(true)
    if let navController = self.navigationController {
        navController.view.endEditing(true)
    }
}

}

© www.soinside.com 2019 - 2024. All rights reserved.