Reputation: 1195
Anyone has ever come into the problem that UITableView
need long press to trigger the didSelectRowAtIndexPath
method?
Upvotes: 9
Views: 6767
Reputation: 19954
In my situation I had a UITapGestureRecognizer on my view for hiding my keyboard.
This solved the problem:
tap.cancelsTouchesInView = false
Upvotes: 4
Reputation: 21
I had exactly the same trouble :
My solution to select a cell in Table View by a short tap (press) :
Upvotes: 2
Reputation: 47089
If you have used any gesture recognizer try to removing it and check if it causing the problem or not ?
Other wise
Not sure but The problem might be in the UITableView
has delaysContentTouches
turned ON. Turn this OFF so touches get through to the cells faster.
Upvotes: 24
Reputation: 1112
You have to add UILongPressGesture to your cell's view and on fire just call didSelectRowAtIndexPath (better will be to call another method - not standard UITableViewDelegate's method) from your class that adopts UITableViewDelegate.
I will suggest You create own protocol, inherited from UITableViewDelegate, add there method for long press behavior method and enjoy. Something similar to:
@protocol LongPressTableViewCellDelegate <UITableViewDelegate>
- (void)tableView:(UITableView *)tableView didLongTapCell:(UITableViewCell *)cell;
@end
Your delegate in this case would adopt not standard UITableViewDelegate, but this one. Also You have to create own cell (inherited from UITableViewCell) and add there delegate property (id ) that will be used when long press fired.
Also there can be situation that standard didSelectRowAtIndexPath will be fired before your long press will fire, so I suggest you to disable standard selection behavior for table view:
_tableView.allowsSelection = NO;
Upvotes: 0