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

如何在iOS Obj-C中隐藏触摸屏上的键盘UITableView,ios,objective-c,iphone,uitextfield,Ios,Objective C,Iphone,Uitextfield,我是iOS开发新手。我想在点击TextField外部时隐藏键盘。我的TextField位于UITableView的单元格中 我曾尝试关注其中一些链接,但没有成功-- 我试图找到最简单的方法。 提前感谢您可以使用点击手势隐藏键盘 - (void) tapGesture : (UIGestureRecognizer *) gestureRecognizer { for (UIView *subview in view.subviews) { if([subview

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

我曾尝试关注其中一些链接,但没有成功--

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

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

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

这是消除键盘干扰的最简单方法

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

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

试试这段代码 在viewDidLoad中编写以下代码,并在.h文件中添加UIgestureRecognitizerDelegate

    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;
}
UITapGestureRecognitor隐藏键盘的事件函数

- (void)handleSingleTap:(UITapGestureRecognizer *)recognizer {
   blview.tag = 0;
  [self.view endEditing: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];
}
UIgestureRecognitor委托

-(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的子类):


希望它能帮助别人。

这与触摸无关,只在滚动时起作用

TableView.keyboardDismissMode = UIScrollViewKeyboardDismissModeOnDrag;
也有

UIScrollViewKeyboardDismissModeInteractive//键盘跟随拖动触摸屏,可能会再次向上拉以取消解除

这将对您有所帮助

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

最简单的方法是在viewDidLoad中分配一个点击手势,然后隐藏键盘

- (void)handleSingleTap:(UITapGestureRecognizer *)recognizer {
   blview.tag = 0;
  [self.view endEditing: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];
}

或者在github上,您肯定发现了一个库,它隐藏了您的键盘

可能的副本,但不想编写这么长的方法来遵循……在这个问题上,也有较短的方法。我相信这是同样的问题。这也会帮助你…-(void)touchesbeated:(NSSet*)toucheevent:(UIEvent*)event{[self.view endEditing:YES];}