I’d like to use the touchesBegan method to know when the user is taping somewhen outside of a UITextField in my TableView.
I’ve got a UIView that contains a TableView, and I have the following method :
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
NSLog(@"See a tap gesture");
UITouch *touch = [touches anyObject];
if(touch.phase==UITouchPhaseBegan){
//find first response view
for (UIView *view in [self.view subviews]) {
if ([view isFirstResponder]) {
[view resignFirstResponder];
break;
}
}
}
[super touchesBegan:touches withEvent:event];
}
My self.view and my self.tableView have both the userInteractionEnabled set to YES, but for some reason, touchesBegan is never triggered. Any idea?
If your
UIViewcontains yourUITableView, then the table view is at the top of the responder chain and the touch events won’t make it into your view. But there might be a better way to do this. What are you after?UPDATE
Implement
UITextFieldDeletate‘stextFieldShouldReturn:method to intercept a press of ‘Return’:Also, a UITableViewDelegate is a UIScrollViewDelegate, so you can hook into those methods to determine when the user interacts with the table view.
Generally speaking I think you don’t have to worry about dismissing the keyboard immediately when a user touches outside of it, especially if you have other text inputs on the same screen.
MOAR
Ok, fair enough, but things start to get complex when you intercept touch events via composite transparent views (these can get expensive as well), and so on. And you never know the repercussions that will arise down the road, not only for the user but for you the programmer when you want to upgrade the app in the future.
Why not keep it simple? How about just a ‘Done’
UIBarButtonItem, or a little translucentUIToolbarthat slides up on top of the keyboard/picker ala Mobile Safari? These solutions are acceptable to the user, and can wind up making his life easier. They certainly make development easier by separating artifacts and functionality into modular units.One final note
Using UITapGestureRecognizer I think will be difficult to get right in your situation. I’m worried that any tap recognizer you add to the table view will prevent things like row selection or moving control to another UI element (text field, switch, etc).