Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Custom buttons in XIB used as Custom UITableViewCell don't respond to taps (ios7)

So here I am upgrading a working ios6 app to ios7, and now I can't receive taps or other actions on custom buttons (or other subviews) inside my tableviewcells.

Edit:

My code:

Here is where I deploy my PlaceCell

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *cellIdentifier = @"PlaceCell";

    PlaceCell *cell = [tableView dequeueReusableCellWithIdentifier: cellIdentifier];

    if (!cell) {
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"PlaceCell" owner:self options:nil];
        cell = [nib lastObject];
        cell.reuseIdentifier = cellIdentifier;
    }
    [cell configureCellWithPlace: [self.places objectAtIndex:indexPath.row]];
    cell.delegate = self;
    cell.userInteractionEnabled = YES;

    return cell;
}

And then it is a normal custom cell with buttons which are connected to some actions by the interface. It works perfectly with iOS6, but it does nothing with iOS7.

Thank you for your help.

like image 564
Javier Peigneux Avatar asked Sep 13 '13 07:09

Javier Peigneux


4 Answers

Solved with:

[cell.contentView setUserInteractionEnabled: NO];
like image 121
Javier Peigneux Avatar answered Sep 28 '22 03:09

Javier Peigneux


Put your button into cell's contentView.

like image 39
Sulthan Avatar answered Sep 28 '22 03:09

Sulthan


This happens when your Cell's view in xib file is not a UITableViewCell, but only a UIView. Make sure that that the xib's top view is a UITableViewCell.

You can easily check it by looking into the first child of the main view inside the interface builder. If the first subview is not "Content View" then you should rebuild the cell with UITableViewCell on the top.

Also make sure that button is a subview of the "Content View".

like image 20
maros Avatar answered Sep 28 '22 05:09

maros


I had a similar problem. I had dragged a UIView into the xib to use as my UITableViewCell. Even though I changed the classname to a subclass of a UITableViewCell in Interface Builder, the events on my buttons still didn't fire. Since it was originally a UIView, IB never knew about contentView and didn't add my controls to it.

Dragging a "real" UITableViewCell into the xib, changing its class to the one I wanted, and then rewiring up the IBOutlets fixed everything. Didn't need to mess with delaysContentTouches or other properties either.

Moral of the story: drag the right thing onto your xibs.

like image 45
swilliams Avatar answered Sep 28 '22 04:09

swilliams