繁体   English   中英

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

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

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

我试图遵循其中一些链接,但没有任何成功--

在 UITextField 之外的任何地方关闭触摸键盘

通过触摸 UITableView 的背景关闭键盘

滚动 UITableView 时隐藏键盘

我试图找到最简单的方法。 提前致谢

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

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

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

TableView.keyboardDismissMode = UIScrollViewKeyboardDismissModeOnDrag;

也有

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

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

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

添加委托类UITextFieldDelegate

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

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

试试这个代码 在 vi​​ewDidLoad 中编写以下代码并在 .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 view 的触摸事件)

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

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

希望它可以帮助某人。

这会帮助你..

-(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 上你肯定找到了一个隐藏键盘的库

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM