Когда UIButton установлен как accessoryView для UITableViewCell, setHighlighted будет вызываться для accessoryView (в данном случае UIButton), когда выбрано его суперпредставление (UITableViewCell).
Чтобы исправить это, нам нужнодля подкласса UIButton, переопределите его setHighlighted setter, чтобы игнорировать, если его суперпредставление isSelected или isHighlighted.
AccessoryViewUIButton.m
#import "AccessoryViewUIButton.h"
@implementation AccessoryViewUIButton
// Subclass only works for buttonWithType:custom
- (id)initWithFrame:(CGRect)aRect
{
// Call the superclass's designated initializer
self = [super initWithFrame:aRect];
return self;
}
- (void)setHighlighted:(BOOL)isHighlighted {
/* Overridden to do nothing if superview is selected or highlighted */
UITableViewCell* theCell = (UITableViewCell*) self.superview;
if ([self.superview isKindOfClass:[UITableViewCell class]]) {
if ([theCell isSelected] || [theCell isHighlighted])
return;
}
[super setHighlighted:isHighlighted];
}
- (void)dealloc {
[super dealloc];
}
@end