how to hide the keyboard when empty area is touched on iphone

IphoneIphone Softkeyboard

Iphone Problem Overview


normally when you touch the text input area, the keyboard pops up and when you touch the empty area of screen, the keyboard disappeared. How to make that happen?

just like what we experienced on iphone safari...

Thank you

Iphone Solutions


Solution 1 - Iphone

Updated way (recommended):

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

This will end editing on all subviews and resign the first responder.

Other way (enumerating over all text views):

Here's a step by step for it:

Add an IBAction to your view controller, such as - (IBAction)backgroundTouch:(id)sender

In the backgroundTouch action, you need to send the resignFirstResponder message to all of the text boxes in your view. This is unfortunate but necessary since there's currently no way to retrieve the object that currently has FirstResponder status. It should look something like this:

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

Add a button control to the view, size it to cover the entire visible area (except for the status bar or any tab or navigation controllers). Select the button and then go to the Layout Menu and select Send To Back. Also set the button's Type to custom, which is invisible if you don't specifically supply any drawing code for it.

Connect the Button's Touch Up Inside event to the backgroundTouch: action and try it out.

Solution 2 - Iphone

Use this simple Solution

For Swift 4 :

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

For Swift 2 :

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

For Objective C :

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

Works with UITextField, UITextView and all subviews.

Solution 3 - Iphone

Forget about putting a button in the background there simple solution

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

Solution 4 - Iphone

there's a tutorial about that problem (also concerning the numerical keyboard with no DONE key) over here

Solution 5 - Iphone

For > iOS 4.0 there is another solution (and maybe better) With this code, single tap anywhere in view to hide keyboard.

// 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];

Solution 6 - Iphone

Send resignFirstResponder to the control.

Solution 7 - Iphone

You can do this way also

Hide keyBoard by touching background in view

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

Solution 8 - Iphone

The Following code works fine with xamarin iOS project :

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

Solution 9 - Iphone

I was having this problem too, it was very annoying. But I figured out how to get rid of the keyboard on accident. Say you are texting John, and there's a keyboard in the way from you viewing your conversations and therefore reducing the screen you can see. Well then click on messages in the uppwer left, then select a different person you have a record of texting with, then hit messages again in the upper left. Then go back and select John. No you're back at the conversation with John, by the keyboard is gone. Seams like a lot but it's pretty quick. You'd think they'd just put a hide button to on the keyboard lol Hope that helps, or was clear enough.

Solution 10 - Iphone

I could not compile Val's answer above using the 'initWithBlock:' selector.

This code works for me. Add this to the method defining the view - note that my view is composed and the subview that I want to respond to the single tap is 'chatView'. The input field view that uses the keyboard is named '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];

Then add the tap-handling method.

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

Solution 11 - Iphone

This solution should work fine if you are working with swift and iOS 8/9:

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionNeo WuView Question on Stackoverflow
Solution 1 - IphoneHitScanView Answer on Stackoverflow
Solution 2 - IphoneShahid AslamView Answer on Stackoverflow
Solution 3 - IphonealexView Answer on Stackoverflow
Solution 4 - IphoneJCView Answer on Stackoverflow
Solution 5 - IphoneValView Answer on Stackoverflow
Solution 6 - IphoneChris LundieView Answer on Stackoverflow
Solution 7 - IphoneVijay DokrimareView Answer on Stackoverflow
Solution 8 - IphoneT. NaikView Answer on Stackoverflow
Solution 9 - Iphonetinpony72View Answer on Stackoverflow
Solution 10 - IphoneStephen ReedView Answer on Stackoverflow
Solution 11 - IphonegbdavidView Answer on Stackoverflow