SimplyKiwi
SimplyKiwi

Reputation: 12444

Keyboard dismissing problem - Objective C

I have set the delegate of my textfield to self and I have added the delegate for it in the .h, but I have a problem. I want the keyboard to hide If I click anything but the textfield in the view. Is this possible? If so, how would I do it?

Upvotes: 0

Views: 390

Answers (4)

Jorge Casariego
Jorge Casariego

Reputation: 22212

I found a simpler way to hide the keyboard and it works when you click on the screen way.

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    // endEditing: 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
    [[self view] endEditing:TRUE];
}

Upvotes: 1

Rui Peres
Rui Peres

Reputation: 25927

You can do some "hacking"... Like this:

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

   //glass is a class's property
   if(glass){
      self.glass=nil;
   }
   glass=[[UIButton alloc] initWithFrame:CGRectMake(0, 0, 320, 480)]; //put the size you want.
   [glass addTarget:self action:@selector(hideGlass) forControlEvents:UIControlEventTouchUpInside];
   [self.view insertSubview:glass belowSubview:textField];
}

-(void)hideGlass{
  //remove your glass.
  [glass removeFromSuperview];
  //your textField resigns first responder.
  if([myTextField canResignFirstResponder]){
      [myTextField resignFirstResponder];
  }
}

So basically what you do, is to add a dummy button right bellow your textField. So when you touch anything else, excepts your textField, he will make your textField resignFirstResponder and removes himself from the view.

Edit 1 ( the tweek) You just need to replace this:

if(glass){
    self.glass=nil;
 }

for this:

if(glass){
   [glass release];
   glass=nil;
}

Upvotes: 0

Alex Nichol
Alex Nichol

Reputation: 7510

If you have an IBOutlet for the UITextField, you can dismiss the keyboard using [textField resignFirstResponder];. This being said, you will have to implement event listeners for everything else on the view. If you want the keyboard to hide when the user taps the view's background, it can be done through a touch event in the view controller's implementation:

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

If you have any buttons or subviews, you will have to implement individual touch events or actions for those as well.

Upvotes: 0

PengOne
PengOne

Reputation: 48398

You just need to implement the following delegate methods:

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

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

Upvotes: 0

Related Questions