如何在触摸屏幕(搜索栏)时隐藏键盘

8
当我点击搜索或取消时,键盘会隐藏。 但是当我在屏幕上的其他地方点击时,我也希望键盘隐藏。 我找到了几个针对文本字段的教程,但我们正在使用搜索栏。 有人能告诉我如何做到这一点吗? 谢谢。

你尝试过 Jensen2k 给出的答案吗:https://dev59.com/UW435IYBdhLWcg3woRnG - mfaerevaag
谢谢您的回复。是的,我也尝试过那个方法。问题是我没有一个文本字段与键盘连接在一起。搜索栏调用了键盘,所以我必须使用搜索栏来取消它。您知道其他解决方案吗?无论如何,还是非常感谢! - Rick
4个回答

29

试一下

在你的.h文件中添加UISearchBar

@property (strong, nonatomic) IBOutlet UISearchBar *searchBar; 

在你的 .m 文件中

- (void)viewDidLoad
{
    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]
                                   initWithTarget:self
                                   action:@selector(dismissKeyboard)];

    [self.view addGestureRecognizer:tap];
}


- (void) dismissKeyboard
{
    // add self
    [self.searchBar resignFirstResponder];
}

先尝试了第一部分,没有出现任何错误,第二部分又说:“未知接收器 'searchBar';你是指 UISearchBar 吗?”感谢您的帮助。我认为这很接近了。 - Rick
是的,我指的是 UISearchBar。在您的接口头文件中定义您的 UISearchBar IBOutLet。 - iMubarak
是的,我忘记在我的.m文件中输入:@synthesize searchBar;。现在它可以工作了。谢谢:D - Rick
如果这个答案解决了你的问题,你可以选择它作为答案。这将有助于其他人找到答案。谢谢。 - iMubarak

1
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
   [yourTextField1 resignFirstResponder];
   [yourTextField2 resignFirstResponder];
   [yourTextField3 resignFirstResponder];
   [yourSearchBar resignFirstResponder];
   //etc
}

但是您可能需要检查您正在触摸的位置,因为如果您正在触摸文本输入框或搜索框,则不希望隐藏键盘。


我也尝试了几次。我得到了以下错误:未知的接收器“searchBar”,您是否指的是UIDearchBar? - Rick

0
你可以添加一个 UITapGestureRecognizer 来隐藏键盘。
- (void)viewDidLoad {
    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]
                                   initWithTarget:self
                                   action:@selector(dismissKeyboard)];
    [self.view addGestureRecognizer:tap];
}

- (void) dismissKeyboard {
     [self.view endEditing:YES];
}

0

尝试使用这个

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

我没有收到任何错误信息,但是它也不起作用。什么都没有发生。无论如何还是谢谢! - Rick
如果您在视图内使用ScrollView,则它将无法工作,否则它将正常工作。 - Dharmbir Singh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接