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.
It's work for me, can you try!
let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.dismissKeyboard)) tap.cancelsTouchesInView = false view.addGestureRecognizer(tap)
My solution is :
set
cancelsTouchesInView
ToNo
of any tapGestureI found in my custom cell ,
userInteractionEnable
is set toNO
, simply deleteuserInteractionEnable = No
and issue solved.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 toNO
on the gesture recogniser to allow the table view to intercept the event.Maybe it is a typo after all. Check that your function is not
didDeselectRowAtIndexPath:
(de select instead of select).My case is strange. My tableView has 2 sections. 1st section's cells work fine about
tableView:didSelectRowAt:
, but 2nd section's cells doesn't triggerdidSelectRowAt:
.The above problem happens at
iPhone 4s, iOS 9.3
. But iniPhone 5s, iOS 10.3
, there are no problems, those cells works fine. It seems likeiOS 9
bugs aboutUITableView
.After many tests, I found out one line codes produces this bug.
Because the 2nd sections has no header view. I remove this line, and all works fine.
I was having this issue for a while, and I did not see any reference to it here, so for reference, another reason for this could be that:
but
As per documentation for