Garrett Garrett - 3 months ago 12
iOS Question

didSelectRowAtIndexPath: not being called

I have a

UITableView
as a subview of my
UIScrollVIew
, which is the main view controlled by my
MainViewController
.

In MainViewController.h

@interface MainViewController : UIViewController <UIGestureRecognizerDelegate, UITableViewDelegate, UITableViewDataSource>

// other stuff here...

@property (weak, nonatomic) IBOutlet UITableView *myTableView;


In MainViewController.m

@synthesize myTableView;

// other stuff here...

- (void)viewDidLoad {
myTableView.delegate = self;
myTableView.datasource = self;
}

// other stuff here...

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath: (NSIndexPath *)indexPath {
[self performSegueWithIdentifier:@"listAttributesSegue" sender:self];
}


I know that
didSelectRowAtIndexPath
is not being called because I have set breakpoints on both the method itself and the line of code inside it, and neither is being called. I also know that the datasource is working correctly because I have other functions which modify the cells at runtime and they are working perfectly fine. I am using the latest Xcode with iOS 5.0 set as the development target. I have searched and searched for an answer. Anyone have any ideas?

Edit:
I have found the answer. I had a
UITapGestureRecognizer
set for myTableView's superView. This overrode the selection call. Credit to whoever suggested that that might be it. Your answer was deleted before I could mark it correct.

Edit 2:
A lot of people have been commenting about this, so I though I would share it. If you are experiencing this problem, simply set
myGestureRecognizer.cancelsTouchInView
to
false
and everything should work fine.

Answer

I have found the answer. I had a UITapGestureRecognizer set for myTableView's superView. This overrode the selection call. Credit to whoever suggested that that might be it. Your answer was deleted before I could mark it correct.

Set the cancelsTouchesInView property to NO on the gesture recogniser to allow the table view to intercept the event.