Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I resignFirstResponder when I click outside of a UITextField onto a UITableView

I am having trouble getting the keyboard in my iPhone app to go away because the UIView even when made a controller is not touchable because of the fact that I have a UITableView taking up the rest of the available screen.

I was curious to know how I would go resigning the keyboard aka firstResponder by clicking onto the UITableView? Is there a way to monitor a touch event on the UITableView even if it is not to select a clickable cell.

Basically, I know how to resign the keyboard if the cell fires the event but, if I click on a non - clickable part of the UITableView I would still like the keyboard to go away.

like image 389
Rob Avatar asked Feb 29 '12 16:02

Rob


3 Answers

2 options:

  • In your viewController, respond to the table's scroll callback and resign the responder
-(void)scrollViewDidScroll:(UIScrollView *)scrollView
{
     [self.view endEditing:YES];
}
  • You can always add a UITapGestureRecognizer to the table/view and resign the responder from there

Personally I usually do it on table scroll, since I don't like a single tap to dismiss the keyboard.

like image 166
Gilad Novik Avatar answered Oct 21 '22 01:10

Gilad Novik


   - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
    UITapGestureRecognizer *doubleTap = 
            [[UITapGestureRecognizer alloc]
             initWithTarget:self 
             action:@selector(tapDetected:)];
            doubleTap.numberOfTapsRequired = 1;
            [self.tableView addGestureRecognizer:doubleTap];
            [doubleTap release];

    }

 - (IBAction)tapDetected:(UIGestureRecognizer *)sender 
 {
    CGPoint p = [sender locationInView:self.tableView];

    NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:p];

   if(indexPath == nil)
   {
     NSLog(@"empty");
   }
   else
   {
     [textField resignFirstResponder];
   }
 }

I think it will help... try it..

like image 30
Jhanvi Avatar answered Oct 21 '22 01:10

Jhanvi


Adding a tap gesture recognizer is an interesting solution, but there's an alternative and you don't need to code anything!

You can set in Interface Builder the property keyboardDismissMode to "Dismiss on drag" for your table view. It's a property inherited from UIScrollView and whenever you scroll your table view, the keyboard is dismissed.

like image 3
rmartinsjr Avatar answered Oct 21 '22 02:10

rmartinsjr