Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

iphone - didSelectRowAtIndexPath: only being called after long press on custom cell

I am creating one table view based application. I have created a custom table cell for table, that contains 2 labels, 1 image and 1 button. The table view Data source method is working properly. I am using xib for both custom cell and view controller class and i connect delegate and data source to the file's owner. But the problem is when i select the table row, didSelectRowAtIndexPath is not getting fire. As mentioned the only way to fire it is to hold down on the cell for about 3-4 seconds. Does anyone have any idea why this is happening?

Thanks for any pointers...

Here is my table view methods..

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {     return 1; }  - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {     return [finalAddonsArray count]; }  - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {     static NSString *CellIdentifier = @"Cell";     NewCustomCell *cell = (NewCustomCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];      if (cell == nil) {         NSArray *nib=[[NSBundle mainBundle]loadNibNamed:@"NewCustomCell" owner:self options:nil];         cell=[nib objectAtIndex:0];     }      Addons *addons1=[[Addons alloc]init];     addons1= [finalAddonsArray objectAtIndex:indexPath.row];      if (addons1.data == nil) {         cell.ivCategory.image = [UIImage imageNamed:@"blogo.jpg"];     }     else     {         cell.ivCategory.image=[UIImage imageWithData:addons1.data];     }      cell.lblTitle.text = addons1.name;     if (addons1.price == nil) {         cell.lblPrice.text = nil;     }     else{         cell.lblPrice.text = [NSString stringWithFormat:@"%@ rs",addons1.price];     }     [cell.button addTarget:self                     action:@selector(editButtonPressed:)           forControlEvents:UIControlEventTouchUpInside];      cell.button.tag=indexPath.row;     index = indexPath;     cell.selectionStyle = UITableViewCellSelectionStyleGray;      return cell; }  -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {     NSLog(@"sjcjksbcjksbcfkebscf1234567890"); } 

One more thing i am getting that if i am using default UITableViewCell instead of custom cell then also my problem is same, delegate method is not getting fire.

Custom cell properties:

enter image description hereenter image description here

like image 555
Anand Gautam Avatar asked Aug 10 '13 06:08

Anand Gautam


2 Answers

same problem happened with me because I have added a tap gesture recogniser over it. If you have used any gesture recognizer try removing it and check if it causing the problem.

EDIT: Solution as commented by the Ali: If you have used tap gesture you can use [tap setCancelsTouchesInView:NO];

like image 124
Manish Agrawal Avatar answered Oct 13 '22 12:10

Manish Agrawal


I was faced with a similar issue:

For me, the problem was because my UITableView was added to an UIScrollView and more specifically to its contentView. It appears that inside the contentView, I had to stay press 2-3 sec to fire the didSelectRowAtIndexPath method.

I moved my TableView to self.view instead of contentView and it solved the problem!

like image 36
Tib Avatar answered Oct 13 '22 11:10

Tib