如何在 iOS Obj-C 中隐藏触摸 UITableView 的键盘

How to hide keyboard on touch UITableView in iOS Obj-C

我是 iOS 开发新手。我想在 TextField 之外点击时隐藏键盘。我的 TextFieldUITableView 的一个单元格中。

我尝试点击其中一些链接,但没有成功--

Dismiss keyboard on touch anywhere outside UITextField

Dismiss keyboard by touching background of UITableView

Hide keyboard when scroll UITableView

我正在尝试找到最简单的方法。 提前致谢

您可以使用点击手势隐藏键盘。

- (void) tapGesture : (UIGestureRecognizer *) gestureRecognizer {   
    for (UIView *subview in view.subviews) {
        if([subview isKindOfClass : [UITextField class]] ) {
            UITextField *tf = (UITextField *) subview;
            [tf resignFirstResponder];
        } 
    }
}

添加代表classUITextFieldDelegate

-(BOOL)textFieldShouldReturn:(UITextField *)textField {
    [textField resignFirstResponder];
    return YES;
}

这是关闭键盘的最简单方法

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    UITapGestureRecognizer *gestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(hideKeyboard)];
    [tableView addGestureRecognizer:gestureRecognizer];
}
- (void)hideKeyboard
{
    [self.view endEditing:YES];
}

您需要添加一个 UITapGestureRecogniser 并将其分配给视图,然后在其选择器的文本字段上调用 ​​resign first responder。

试试这个代码 在viewDidLoad中写入如下代码,并在.h文件中添加UIGestureRecognizerDelegate。

    UITapGestureRecognizer *singleFingerTap =
[[UITapGestureRecognizer alloc] initWithTarget:self
                                        action:@selector(handleSingleTap:)];
[singleFingerTap setDelegate:self];
[self.view addGestureRecognizer:singleFingerTap];

// Listen for keyboard appearances and disappearances

[[NSNotificationCenter defaultCenter] addObserver:self 
                                     selector:@selector(keyboardDidShow:)
                                         name:UIKeyboardDidShowNotification
                                       object:nil];

[[NSNotificationCenter defaultCenter] addObserver:self
                                     selector:@selector(keyboardDidHide:)
                                         name:UIKeyboardDidHideNotification
                                       object:nil];

键盘代表的出现与消失

- (void)keyboardDidShow: (NSNotification *) notif{
 // Do something here
  tblview.tag = 1;
}
- (void)keyboardDidHide: (NSNotification *) notif{
// Do something here
tblview.tag = 0;
}

用于隐藏键盘的 UITapGestureRecognizer 事件函数

- (void)handleSingleTap:(UITapGestureRecognizer *)recognizer {
   blview.tag = 0;
  [self.view endEditing:YES];
 }

UIGestureRecognizer 委托

-(BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer{
if(tblview.tag == 1){
    return TRUE;
}
else{
    return FALSE;
   }
}

我分两部分使用解决方案:

要在 tableview/collectionview 上关闭键盘,请点击:

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

(不要忘记将 cancelsTouchesInView 设置为 NO 以获得 tableview/collection 视图的触摸事件)

在滚动时关闭键盘(因为 tableview/collectionview 是 UIScrollView 的子类):

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {
     [self.view endEditing:YES];
}

希望对大家有所帮助。

与触摸无关,仅在滚动时有效

TableView.keyboardDismissMode = UIScrollViewKeyboardDismissModeOnDrag;

还有

UIScrollViewKeyboardDismissModeInteractive // 键盘跟随拖动触屏,可再次向上拉取消dismiss

这对你有帮助..

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{ 
 [self.view endEditing:YES]; 
}

最简单的方法是在viewDidLoad中分配一个tap Gesture然后隐藏键盘

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    UITapGestureRecognizer *gestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(hideKeyboard)];
    [_tableView addGestureRecognizer:gestureRecognizer];
}
- (void)hideKeyboard
{
    [self.view endEditing:YES];
}

或者在 github 上你肯定找到了一个隐藏键盘的库