378

I have quite a few controls scattered throughout many table cells in my table, and I was wondering if there's an easier way to dismiss the keyboard without having to loop through all my controls and resigning them all as the first responder. I guess the question is.. How would I get the current first responder to the keyboard?

James Webster
  • 30,976
  • 11
  • 64
  • 113
Seventoes
  • 4,728
  • 3
  • 17
  • 18
  • nice complement to this question: http://stackoverflow.com/questions/1490573/how-to-programatically-check-whether-a-keyboard-is-present-in-iphone-app – ericsoco Feb 11 '13 at 07:13
  • A caveat to all the below answers. If you perform a segue just after you resign the KB, the KB get's orphaned and cannot not be dismissed. You must dismiss the KB in the textFieldShouldReturn method. – gjpc Feb 06 '14 at 19:09
  • 27
    global keyboard dismissal the right way: `[[[UIApplication sharedApplication] keyWindow] endEditing:YES];` – Yerk Jan 28 '15 at 18:25
  • I found this video helpful https://pinkstone.co.uk/how-to-dismiss-the-keyboard-from-a-uitextfield-in-ios/ . Maybe it can help others. – enthusiasticgeek Apr 03 '19 at 15:59

31 Answers31

803

Try:

[self.view endEditing:YES];
Iulian Onofrei
  • 7,489
  • 8
  • 59
  • 96
kirby
  • 8,062
  • 2
  • 13
  • 2
  • 1
    This does seem to work (tested on ios4.1). Though it is only available on iOS 3.2 upwards. I'm not sure if this is actually guaranteed to work, or is just a non-guaranteed side effect from calling an API in a way that it's not documented to work. – JosephH Sep 14 '10 at 04:28
  • 3
    This worked perfectly for me, and is certainly preferable to some of the other answers to this question. The docs say it's available in iOS 2.0 and later. – antsyawn Dec 31 '10 at 01:18
  • 8
    As the documentation says: _"This method looks at the current view and its subview hierarchy for the text field that is currently the first responder. If it finds one, it asks that text field to resign as first responder. If the force parameter is set to YES, the text field is never even asked; it is forced to resign."_ - so this is IMO the correct answer to the original question (use-case: I have a form with millions of fields, well - ten... or so, and I need to dismiss the keyboard). – joshis Jul 19 '11 at 19:34
  • This method works best on a signup form etc where there are so many text fields and you want to resign keyboard on tapping background. Thanks for this line of code – carbonr Jan 28 '12 at 13:23
  • Changed the accepted answer to this. The old one (Nicholas Riley's) was the correct way before iOS 3.2. – Seventoes Oct 22 '12 at 00:55
  • 14
    Answer is not wrong but a little incorrect, actually it should be: `[self.view endEditing:YES];` as BOOL values are YES/NO in Objective-C. – chrisben Jan 05 '13 at 16:29
  • 24
    chrisben: You can use YES/NO, TRUE/FALSE, 0/1. – Michael Superczynski Jan 27 '13 at 02:35
  • 1
    ...and if you are doing window manipulation, say from a modal singleton, you might want to just do it on the window: [[UIApplication sharedApplication].keyWindow endEditing:YES]; – Shawn Mar 27 '14 at 15:15
  • Please check answer here http://stackoverflow.com/questions/3161269/hide-input-keyboard-on-iphone-without-knowing-first-responder?lq=1 – RayChen Aug 05 '15 at 04:17
126

You can force the currently-editing view to resign its first responder status with [view endEditing:YES]. This hides the keyboard.

Unlike -[UIResponder resignFirstResponder], -[UIView endEditing:] will search through subviews to find the current first responder. So you can send it to your top-level view (e.g. self.view in a UIViewController) and it will do the right thing.

(This answer previously included a couple of other solutions, which also worked but were more complicated than is necessary. I've removed them to avoid confusion.)

Nicholas Riley
  • 40,933
  • 5
  • 98
  • 123
  • But that will only block the component from becoming firstResponder, not remove current firstResponder status from an element. – Kendall Helmstetter Gelner Apr 13 '09 at 06:29
  • What I meant in overriding becomeFirstResponder to store the first responder somewhere, so it can be accessed (in this case, resigned) later. The basic problem is that Cocoa Touch does not provide a way to ask a window or view what its first responder is. – Nicholas Riley Apr 13 '09 at 15:29
  • +1 Adding becomeFirstResponder resolved issues I was having with taps on other UITextFields. – Jason George Mar 15 '12 at 21:01
  • 3
    This is obsolete. The `[self.view endEditing:YES];` answer is better. – ftvs Jun 29 '12 at 04:41
  • Agreed — can you tell I'm not actually an iOS developer? I fixed it since this answer seems to be getting used. – Nicholas Riley Jun 29 '12 at 13:46
  • I have problem with [self.view endEditing:YES];. I trigger this inside UITableView when user starts scrolling. When that happens the scroll bar is small and I can scroll 'under' the table view. Releasing finger and scrolling again solves that but it is rather annoying.. – Matej Aug 31 '12 at 22:49
  • endEditing does not work either. At least did not work with UITableView – Ben Affleck Jul 07 '14 at 19:09
  • 1
    This is not obsolete, this answer explain exactly how `[UIView endediting:]` works. In one of apps I've developed, a search box was added in UINavigationViewController, if you just call `[self.view endEditing:YES]`, as `self` your view controller, this will not work, instead, I called this method directly in view scope where search box was added, example: `[self.mySearchBoxView endEditing:YES]`. – Jan Cássio Feb 16 '15 at 01:47
  • @JanCássio - FYI, you probably missed that this is not obsolete *because* in 2012 it was edited in response to the complaint that it was obsolete, to incorporate the suggested simpler/more-up-to-date answer. – ToolmakerSteve Mar 14 '17 at 05:26
93

You can send a nil targeted action to the application, it'll resign first responder at any time without having to worry about which view currently has first responder status.

Objective-C:

[[UIApplication sharedApplication] sendAction:@selector(resignFirstResponder) to:nil from:nil forEvent:nil];

Swift 3.0:

UIApplication.shared.sendAction(#selector(resignFirstResponder), to: nil, from: nil, for: nil)

Nil targeted actions are common on Mac OS X for menu commands, and here's a use for them on iOS.

Travelling Man
  • 1,341
  • 10
  • 12
  • 14
    Best solution of the entire page. – Leo Natan Jun 30 '13 at 14:03
  • Absolutely the best way to get rid of keyboard from anywhere in iOS app. – Ben Affleck Jan 15 '14 at 23:40
  • Still works for me in iOS8. In my application, I have a side bar menu, and there are times that the "center" view controller shows keyboard. And I want to dismiss the keyboard if the side bar menu will show. So I added this code in my side bar menu Class' viewWillAppear method. – Jenn Eve Feb 24 '15 at 09:22
  • 1
    Still works in iOS 9. Great way to globally resign focus of a textfield and dismiss keyboard. – bmjohns Mar 22 '16 at 17:48
  • And to continue this particular commenting streak.... Still works in iOS 10. :-) – Travelling Man Jun 08 '17 at 21:04
56

To be honest, I'm not crazy about any of the solutions proposed here. I did find a nice way to use a TapGestureRecognizer that I think gets to the heart of your problem: When you click on anything besides the keyboard, dismiss the keyboard.

  1. In viewDidLoad, register to receive keyboard notifications and create a UITapGestureRecognizer:

    NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
    
    [nc addObserver:self selector:@selector(keyboardWillShow:) name:
    UIKeyboardWillShowNotification object:nil];
    
    [nc addObserver:self selector:@selector(keyboardWillHide:) name:
    UIKeyboardWillHideNotification object:nil];
    
    tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self
    action:@selector(didTapAnywhere:)];
    
  2. Add the keyboard show/hide responders. There you add and remove the TapGestureRecognizer to the UIView that should dismiss the keyboard when tapped. Note: You do not have to add it to all of the sub-views or controls.

    -(void) keyboardWillShow:(NSNotification *) note {
        [self.view addGestureRecognizer:tapRecognizer];
    }
    
    -(void) keyboardWillHide:(NSNotification *) note
    {
        [self.view removeGestureRecognizer:tapRecognizer];
    }
    
  3. The TapGestureRecognizer will call your function when it gets a tap and you can dismiss the keyboard like this:

    -(void)didTapAnywhere: (UITapGestureRecognizer*) recognizer {    
        [textField resignFirstResponder];
    }
    

The nice thing about this solution is that it only filters for Taps, not swipes. So if you have scrolling content above the keyboard, swipes will still scroll and leave the keyboard displayed. By removing the gesture recognizer after the keyboard is gone, future taps on your view get handled normally.

Professor Todd
  • 494
  • 2
  • 10
Brett Levine
  • 568
  • 4
  • 4
  • To my @implementation I added @property (assign) UITapGestureRecognizer *tapRecognizer; and modified self.tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(didTapAnywhere:)]; – Professor Todd Jul 15 '11 at 03:18
  • I'm trying to do a similar thing, and I'm not getting the callback on tap. Curious: why is your property 'assign'? – TahoeWolverine Aug 26 '11 at 14:24
  • Plus one, and furthermore this should be the default iOS behavior. Or at least add a simple way to toggle a dismiss button. – Shaunti Fondrisi Aug 11 '15 at 17:48
24

This is a solution to make the keyboard go away when hit return in any textfield, by adding code in one place (so don't have to add a handler for each textfield):


consider this scenario:

i have a viewcontroller with two textfields (username and password). and the viewcontroller implements UITextFieldDelegate protocol

i do this in viewDidLoad

- (void)viewDidLoad 
{
    [super viewDidLoad];

    username.delegate = self;
    password.delegate = self;
}

and the viewcontroller implements the optional method as

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

and irrespective of the textfield you are in, as soon as i hit return in the keyboard, it gets dismissed!

In your case, the same would work as long as you set all the textfield's delegate to self and implement textFieldShouldReturn

ToolmakerSteve
  • 5,893
  • 8
  • 67
  • 145
prakash
  • 55,001
  • 25
  • 87
  • 114
  • Well I already have the problem solved, but in my case I wanted to dismiss the keyboard on my own (in code), and I didn't know which textField had first responder status. – Seventoes Jul 16 '09 at 07:03
  • 1
    There are cases when you may want to dismiss the keyboard without hitting "return", for example when a sidebar menu is about to be displayed – Peter Johnson May 11 '15 at 13:18
  • Edited to clarify that this answer is *only* relevant in situations where hitting "return" is an acceptable solution. [In my case, I also wanted to dismiss keyboard when user taps outside the field being edited; this answer does not help with that.] – ToolmakerSteve Mar 14 '17 at 05:38
14

A better approach is to have something "steal" first responder status.

Since UIApplication is a subclass of UIResponder, you could try:

[[UIApplication sharedApplication] becomeFirstResponder]
[[UIApplication sharedApplication] resignFirstResponder]

Failing that, create a new UITextField with a zero sized frame, add it to a view somewhere and do something similar (become followed by resign).

Kendall Helmstetter Gelner
  • 73,251
  • 26
  • 123
  • 148
  • 1
    The UIApplication trick doesn't work (it crashes, at least on the simulator) but you don't need a zero-sized UITextField - just pick any random field and do this with it. NSResponder's becomeFirstResponder is a notification only method, yet UIResponder's isn't (the design is worse, actually). – Nicholas Riley Apr 13 '09 at 15:50
  • 1
    Aha, thanks! It crashes calling it on UIApplication but the zero size UITextField works great, and I don't have to retrieve any of my previous fields. – Seventoes Apr 21 '09 at 22:59
  • Why would anyone do this if there is an official, perfectly good and documented method for this? – Maciej Swic Sep 05 '13 at 07:47
  • 2
    They wouldn't, see most upvoted answer for the better solution. It just was not well known at the time (my answer was from 2009, the other answer came more than a year later in 2010). but I leave it for posterity. – Kendall Helmstetter Gelner Sep 06 '13 at 20:43
8

Tuck this away in some utility class.

+ (void)dismissKeyboard {
    [self globalResignFirstResponder];
}

+ (void) globalResignFirstResponder {
    UIWindow * window = [[UIApplication sharedApplication] keyWindow];
    for (UIView * view in [window subviews]){
        [self globalResignFirstResponderRec:view];
    }
}

+ (void) globalResignFirstResponderRec:(UIView*) view {
    if ([view respondsToSelector:@selector(resignFirstResponder)]){
        [view resignFirstResponder];
    }
    for (UIView * subview in [view subviews]){
        [self globalResignFirstResponderRec:subview];
    }
}
lorean
  • 2,140
  • 19
  • 25
6

@Nicholas Riley & @Kendall Helmstetter Geln & @cannyboy:

Absolutely brilliant!

Thank you.

Considering your advice and the advice of others in this thread, this is what I've done:

What it looks like when used:

[[self appDelegate] dismissKeyboard]; (note: I added appDelegate as an addition to NSObject so I can use anywhere on anything)

What it looks like under the hood:

- (void)dismissKeyboard 
{
    UITextField *tempTextField = [[[UITextField alloc] initWithFrame:CGRectZero] autorelease];
    tempTextField.enabled = NO;
    [myRootViewController.view addSubview:tempTextField];
    [tempTextField becomeFirstResponder];
    [tempTextField resignFirstResponder];
    [tempTextField removeFromSuperview];
}

EDIT

Amendment to my answer to included tempTextField.enabled = NO;. Disabling the text field will prevent UIKeyboardWillShowNotification and UIKeyboardWillHideNotification keyboard notifications from being sent should you rely on these notifications throughout your app.

Jeremy
  • 8,606
  • 2
  • 32
  • 44
5

Quick tip on how to dismiss the keyboard in iOS when a user touches anywhere on the screen outside of the UITextField or keyboard. Considering how much real estate the iOS keyboard can take up, it makes sense to have an easy and intuitive way for your users to dismiss the keyboard.

Here's a link

Armen
  • 51
  • 1
  • 1
5

A lot of overly-complicated answers here, perhaps because this is not easy to find in the iOS documentation. JosephH had it right above:

[[view window] endEditing:YES];
Kristian Glass
  • 33,669
  • 6
  • 39
  • 71
Ian Wilkinson
  • 51
  • 1
  • 1
4

Even Simpler than Meagar's answer

overwrite touchesBegan:withEvent:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    [textField resignFirstResponder];`
}

This will dismiss the keyboardwhen you touch anywhere in the background.

P.J.Radadiya
  • 1,372
  • 10
  • 16
4

Here's what I use in my code. It works like a charm!

In yourviewcontroller.h add:

@property (nonatomic) UITapGestureRecognizer *tapRecognizer;

Now in the .m file, add this to your ViewDidLoad function:

- (void)viewDidLoad {
    //Keyboard stuff
    tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(didTapAnywhere:)];
    tapRecognizer.cancelsTouchesInView = NO;
    [self.view addGestureRecognizer:tapRecognizer];
}

Also, add this function in the .m file:

- (void)handleSingleTap:(UITapGestureRecognizer *) sender
{
    [self.view endEditing:YES];
}
Takide
  • 325
  • 2
  • 10
  • Thanks! But you should rename the function to 'didTapAnywhere' or the gesture recognizer to 'handleSingleTap' ;-) – Matthijs Feb 05 '19 at 08:36
2

In your view controller's header file add <UITextFieldDelegate> to the definition of your controller's interface so that it conform to the UITextField delegate protocol...

@interface someViewController : UIViewController <UITextFieldDelegate>

... In the controller's implementation file (.m) add the following method, or the code inside it if you already have a viewDidLoad method ...

- (void)viewDidLoad
{
    // Do any additional setup after loading the view, typically from a nib.
    self.yourTextBox.delegate = self;
}

... Then, link yourTextBox to your actual text field

- (BOOL)textFieldShouldReturn:(UITextField *)theTextField 
{
    if (theTextField == yourTextBox) {
        [theTextField resignFirstResponder];
    }
    return YES;
}
C4 - Travis
  • 4,492
  • 4
  • 29
  • 56
2

You should send endEditing: to working window being the subclass of UIView

[[UIApplication sharedApplication].windows.firstObject endEditing:NO];
malex
  • 9,374
  • 3
  • 53
  • 71
2

The best way to dismiss keyboard from UITableView and UIScrollView are:

tableView.keyboardDismissMode = UIScrollViewKeyboardDismissModeOnDrag
Abha
  • 957
  • 1
  • 12
  • 36
Manish Methani
  • 197
  • 1
  • 7
2

In swift 3 you can do the following

UIApplication.shared.sendAction(#selector(UIResponder.resignFirstResponder), to: nil, from: nil, for: nil)
KeithC
  • 55
  • 7
1

You may also need to override UIViewController disablesAutomaticKeyboardDismissal to get this to work in some cases. This may have to be done on the UINavigationController if you have one.

Craig Miller
  • 510
  • 7
  • 8
1

Subclass your textfields... and also textviews

In the subclass put this code..

-(void)conformsToKeyboardDismissNotification{

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(dismissKeyBoard) name:KEYBOARD_DISMISS object:nil];
}

-(void)deConformsToKeyboardDismissNotification{

    [[NSNotificationCenter defaultCenter] removeObserver:self name:KEYBOARD_DISMISS object:nil];
}

- (void)dealloc{
    [[NSNotificationCenter defaultCenter] removeObserver:self];
    [self resignFirstResponder];
}

In the textfield delegates (similarly for textview delegates)

-(void)textFieldDidBeginEditing:(JCPTextField *)textField{
     [textField conformsToKeyboardDismissNotification];
}


- (void)textFieldDidEndEditing:(JCPTextField *)textField{
    [textField deConformsToKeyboardDismissNotification];
}

All set.. Now just post the notification from anywhere in your code. It will resign any keyboard.

pinckerman
  • 3,889
  • 6
  • 29
  • 40
mmmanishs
  • 591
  • 5
  • 10
1

And in swift we can do

UIApplication.sharedApplication().sendAction("resignFirstResponder", to: nil, from: nil, forEvent: nil)
Eike
  • 1,951
  • 17
  • 31
1

To dismiss a keyboard after the keyboard has popped up, there are 2 cases,

  1. when the UITextField is inside a UIScrollView

  2. when the UITextField is outside a UIScrollView

2.when the UITextField is outside a UIScrollView override the method in your UIViewController subclass

you must also add delegate for all UITextView

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    [self.view endEditing:YES];
}
  1. In a scroll view, Tapping outside will not fire any event, so in that case use a Tap Gesture Recognizer, Drag and drop a UITapGesture for the scroll view and create an IBAction for it.

to create a IBAction, press ctrl+ click the UITapGesture and drag it to the .h file of viewcontroller.

Here I have named tappedEvent as my action name

- (IBAction)tappedEvent:(id)sender {
      [self.view endEditing:YES];  }

the abouve given Information was derived from the following link, please refer for more information or contact me if you dont understand the abouve data.

http://samwize.com/2014/03/27/dismiss-keyboard-when-tap-outside-a-uitextfield-slash-uitextview/

1

Jeremy's answer wasn't quite working for me, I think because I had a navigation stack in a tab view with a modal dialog on top of it. I'm using the following right now and it is working for me, but your mileage may vary.

 // dismiss keyboard (mostly macro)
[[UIApplication sharedApplication].delegate dismissKeyboard]; // call this in your to app dismiss the keybaord

// --- dismiss keyboard (in indexAppDelegate.h) (mostly macro)
- (void)dismissKeyboard;

// --- dismiss keyboard (in indexAppDelegate.m) (mostly macro)
// do this from anywhere to dismiss the keybard
- (void)dismissKeyboard {    // from: http://stackoverflow.com/questions/741185/easy-way-to-dismiss-keyboard

    UITextField *tempTextField = [[UITextField alloc] initWithFrame:CGRectZero];

    UIViewController *myRootViewController = <#viewController#>; // for simple apps (INPUT: viewController is whatever your root controller is called.  Probably is a way to determine this progragrammatically)
    UIViewController *uivc;
    if (myRootViewController.navigationController != nil) { // for when there is a nav stack
        uivc = myRootViewController.navigationController;
    } else {
        uivc = myRootViewController;
    }

    if (uivc.modalViewController != nil) { // for when there is something modal
        uivc = uivc.modalViewController;
    } 

    [uivc.view  addSubview:tempTextField];

    [tempTextField becomeFirstResponder];
    [tempTextField resignFirstResponder];
    [tempTextField removeFromSuperview];
    [tempTextField release];

}
JJ Rohrer
  • 2,612
  • 4
  • 27
  • 33
  • Hmm - why the down-vote? I addressed specific real-world shortcomings in another answer with tested code. I can understand a lack of up-votes, but voting me into negative territory is real discouragement. I still hope the above answer helps someone else. – JJ Rohrer Oct 12 '11 at 03:21
0

I hate that there's no "global" way to programmatically dismiss the keyboard without using private API calls. Frequently, I have the need to dismiss the keyboard programmatically without knowing what object is the first responder. I've resorted to inspecting the self using the Objective-C runtime API, enumerating through all of its properties, pulling out those which are of type UITextField, and sending them the resignFirstResponder message.

It shouldn't be this hard to do this...

CIFilter
  • 8,488
  • 4
  • 43
  • 65
0

A slightly more robust method I needed to use recently:

- (void) dismissKeyboard {
    NSArray *windows = [UIApplication sharedApplication].windows;

    for(UIWindow *window in windows) [window endEditing:true];

    //  Or if you're only working with one UIWindow:

    [[UIApplication sharedApplication].keyWindow endEditing:true];
}

I found some of the other "global" methods didn't work (for example, UIWebView & WKWebView refused to resign).

mattsven
  • 19,239
  • 8
  • 62
  • 102
0

It's not pretty, but the way I resign the firstResponder when I don't know what that the responder is:

Create an UITextField, either in IB or programmatically. Make it Hidden. Link it up to your code if you made it in IB. Then, when you want to dismiss the keyboard, you switch the responder to the invisible text field, and immediately resign it:

  [self.invisibleField becomeFirstResponder];
  [self.invisibleField resignFirstResponder];
cannyboy
  • 23,724
  • 40
  • 138
  • 242
0

Add A Tap Gesture Recognizer to your view.And define it ibaction

your .m file will be like

    - (IBAction)hideKeyboardGesture:(id)sender {
    NSArray *windows = [UIApplication sharedApplication].windows;
    for(UIWindow *window in windows) [window endEditing:true];
    [[UIApplication sharedApplication].keyWindow endEditing:true];
}

It's worked for me

Murat KAYA
  • 23
  • 7
0

You can recursively iterate through subviews, store an array of all UITextFields, and then loop through them and resign them all.

Not really a great solution, especially if you have a lot of subviews, but for simple apps it should do the trick.

I solved this in a much more complicated, but much more performant way, but using a singleton/manager for the animation engine of my app, and any time a text field became the responder, I would assign assign it to a static which would get swept up (resigned) based on certain other events... its almost impossible for me to explain in a paragraph.

Be creative, it only took me 10 minutes to think through this for my app after I found this question.

M. Ryan
  • 6,674
  • 9
  • 48
  • 74
0

Yes, endEditing is the best option. And From iOW 7.0, UIScrollView has a cool feature to dismiss the keyboard on interacting with the scroll view. For achieving this, you can set keyboardDismissMode property of UIScrollView.

Set the keyboard dismiss mode as:

tableView.keyboardDismissMode = UIScrollViewKeyboardDismissModeOnDrag

It has few other types. Have a look at this apple document.

Shanmugaraja G
  • 2,710
  • 3
  • 28
  • 46
0

In swift :

self.view.endEditing(true)
YannSteph
  • 9,590
  • 3
  • 49
  • 46
0

You have to use one of these methods,

[self.view endEditing:YES];

or

[self.textField resignFirstResponder];
Federico klez Culloca
  • 22,898
  • 15
  • 55
  • 90
Vaibhav Shiledar
  • 865
  • 8
  • 15
0

Update

I found another simple way

simply declare a property :-

@property( strong , nonatomic) UITextfield *currentTextfield;

and a Tap Gesture Gecognizer:-

@property (strong , nonatomic) UITapGestureRecognizer *resignTextField;

In ViewDidLoad

_currentTextfield=[[UITextField alloc]init];
_resignTextField=[[UITapGestureRecognizer alloc]initWithTarget:@selector(tapMethod:)];

[self.view addGestureRecognizer:_resignTextField];

Implement the textfield delegate method didBeginEditing

 -(void)textFieldDidBeginEditing:(UITextField *)textField{


      _currentTextfield=textField;

    }

Implement Your Tap Gesture Method (_resignTextField)

 -(void)tapMethod:(UITapGestureRecognizer *)Gesture{

     [_currentTextfield resignFirstResponder];

 }
tryKuldeepTanwar
  • 3,112
  • 1
  • 16
  • 45
0

the easist way is to call the method

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{
    if(![txtfld resignFirstResponder])
    {
        [txtfld resignFirstResponder];
    }
    else
    {

    }
    [super touchesBegan:touches withEvent:event];
}
P.J.Radadiya
  • 1,372
  • 10
  • 16
bharath gangupalli
  • 560
  • 1
  • 6
  • 22
  • You don't need the 'if' there, resignFirstResponder will do it's thing anyways. Maybe you meant -(BOOL)canResignFirstResponder? – Seventoes Dec 27 '10 at 11:12