UIButton が UITableViewCell の accessoriesView として設定されている場合、スーパービュー (UITableViewCell) が選択されると、accessoryView (この場合は UIButton) に対して setHighlighted が呼び出されます。
これを修正するには、UIButton をサブクラス化し、その setHighlighted セッターをオーバーライドして、スーパービューが isSelected または isHighlighted であるかどうかを無視する必要があります。
AccessoriesViewUIButton.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