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:
Solved with:
[cell.contentView setUserInteractionEnabled: NO];
Put your button into cell's contentView
.
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".
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.
It seems to be that when you use interface builder to customize a cell subclass all the views added are added below the contentView. This is why setting userInteractionEnabled = NO on the content view works, because touch events are allow to pass through.
I used po [view recursiveDescription]
with lldb to determine this.