我有一个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];
}
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];
}
}
}
愿这会对你有所帮助
在你的touchesBegan方法中,你可以使用resignFirstResponder来使键盘消失。希望这会有所帮助,为吉姆欢呼。
//此方法将在导航到其他视图之前调用...
-(void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:YES];
[yourTextField resignFirstResponder];
}
//这将在导航到其他屏幕之前重新设置键盘..
我希望这能帮到您。
未经测试。将敲击手势添加到UINavigationbar并添加动作以停止响应者。
UITapGestureRecognizer *gestureRecognizer=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(hideKeyboard)];
gestureRecognizer.numberOfTapsRequired=1;
gestureRecognizer.cancelsTouchesInView = NO;
[UInavigationbar addGestureRecognizer:gestureRecognizer];
[gestureRecognizer release];
行动:
[Textfield resignfirstresponder]
您可以使用此快速扩展程序在外部单击时关闭键盘。可以在导航栏或视图控制器视图上单击用户。
只需在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)
}
}
}