如何在iphone上触摸空白区域时隐藏键盘

时间:2009-04-29 22:28:40

标签: iphone iphone-softkeyboard

通常当您触摸文本输入区域时,键盘会弹出,当您触摸屏幕的空白区域时,键盘会消失。如何实现这一目标?

就像我们在iphone safari上所经历的那样...

谢谢

11 个答案:

答案 0 :(得分:115)

更新方式(推荐):

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

这将结束所有子视图的编辑并重新签署第一个响应者。

其他方式(枚举所有文本视图):

以下是一步一步:

将IBAction添加到视图控制器,例如 - (IBAction)backgroundTouch:(id)sender

在backgroundTouch操作中,您需要将resignFirstResponder消息发送到视图中的所有文本框。这是不幸的,但是必要的,因为目前无法检索当前具有FirstResponder状态的对象。看起来应该是这样的:

- (IBAction)backgroundTouch:(id)sender {
  [someTextBox resignFirstResponder];
  [anotherTextBox resignFirstResponder];
}

向视图添加一个按钮控件,将其大小覆盖整个可见区域(状态栏或任何选项卡或导航控制器除外)。选择按钮,然后转到布局菜单并选择发送至返回。同时将按钮的类型设置为自定义,如果您没有专门为其提供任何绘图代码,则该类型是不可见的。

将Button的Touch Up Inside事件连接到backgroundTouch:动作并试用。

答案 1 :(得分:73)

使用这个简单的解决方案

对于Swift 4:

   override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        self.view.endEditing(true)
   }

对于Swift 2:

    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
        self.view.endEditing(true)
    }

对于目标C:

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

使用UITextField,UITextView和所有子视图。

答案 2 :(得分:16)

忘了在背景中放一个按钮那里有简单的解决方案

(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    [self.textfieldName resignFirstResponder];
}

答案 3 :(得分:4)

有一个关于这个问题的教程(关于没有DONE键的数字键盘)here

答案 4 :(得分:4)

对于&gt; iOS 4.0还有另一种解决方案(也许更好) 使用此代码,可以在视图中的任意位置单击以隐藏键盘。

// single tap to resign keyboard
UITapGestureRecognizer *singleTapRecognizer = [[UITapGestureRecognizer alloc] initWithBlock:^(UIGestureRecognizer *rec){
            [input_text resignFirstResponder];
        }];
self.singleTapRecognizer.numberOfTapsRequired = 1;
self.singleTapRecognizer.cancelsTouchesInView = NO;
[self.view addGestureRecognizer:singleTapRecognizer];

答案 5 :(得分:2)

resignFirstResponder发送给控件。

答案 6 :(得分:1)

你也可以这样做

通过触摸视图中的背景隐藏keyBoard

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

答案 7 :(得分:1)

以下代码适用于xamarin iOS项目:

public override void TouchesBegan (NSSet touches, UIEvent evt){
    View.EndEditing (true);
}

答案 8 :(得分:0)

我也有这个问题,这很烦人。但我想出了如何在意外中摆脱键盘。假设您正在给约翰发短信,并且在查看对话时会出现键盘,从而减少您可以看到的屏幕。然后单击左侧的消息,然后选择另一个您有短信记录的人,然后再次点击左上角的消息。然后回去选择约翰。不,你回到约翰的谈话,键盘消失了。接缝很多,但很快。你认为他们只是在键盘上放了一个隐藏按钮lol希望有帮助,或者说足够清楚。

答案 9 :(得分:0)

我无法使用'initWithBlock:'选择器编译Val的答案。

此代码适用于我。将此添加到定义视图的方法中 - 请注意我的视图已合成,并且我想要响应单击的子视图是“chatView”。使用键盘的输入字段视图名为“chatInput”。

    // single tap to resign (hide) the keyboard
    UITapGestureRecognizer *singleTapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapFrom:)];
    singleTapRecognizer.numberOfTouchesRequired = 1;
    singleTapRecognizer.cancelsTouchesInView = NO;
    [chatContent addGestureRecognizer:singleTapRecognizer];

然后添加点击处理方法。

/**
 * Handles a recognized single tap gesture.
 */
- (void) handleTapFrom: (UITapGestureRecognizer *) recognizer {
    // hide the keyboard
    NSLog(@"hiding the keyboard");
    [chatInput resignFirstResponder]; 
}

答案 10 :(得分:0)

如果你正在使用swift和iOS 8/9,这个解决方案应该可以正常工作:

    override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
         self.view.endEditing(true)
    }