要重现这一点,请创建一个UITableView,其中包含具有自定义AccessoryViews的单元格(例如,执行特定操作的按钮,其中触摸UITableViewCell的其他部分应执行不同的操作)。
如果触摸(选择)UITableView,AccessoryView也会显示选择(如同触摸的那样)。我想阻止它,并且只在实际触及AccessoryView时显示AccessoryView的选定状态。
提前致谢,
groomsy
答案 0 :(得分:5)
当UIButton设置为UITableViewCell的accessoryView时,如果选择了superview(UITableViewCell),将为accessoryView(本例中为UIButton)调用setHighlighted。
要解决此问题,我们需要子类化UIButton,覆盖其setHighlighted setter,以忽略其superview是否被选中或是否突出显示。
<强> 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
答案 1 :(得分:2)
您使用的是自定义UITableViewCell
子类吗?我会尝试这样做并压倒一切
setSelected:(BOOL)selected
为该课程确保按照您的意愿处理事情。
答案 2 :(得分:0)
轻触表格单元格时,附件视图不会发光或显示选择。我想你希望tableViewCell的蓝色选择状态在accessoryViews背景上不可见。那是对的吗?
我建议创建自己的自定义tableViewCell,并将单元格的selectionStyle设置为UITableViewCellSelectionStyleNone
,并将tableRowSelection处理为单独的单元格侧的setSelected状态,而不是附件视图。
或者只是将附件视图的背景稍大一点,不要将backgroundColor设置为clearColor。这样,单元格的选择状态也不会显示在附件视图上。
答案 3 :(得分:0)
对表格视图单元格进行子类化,并覆盖以下方法:
- (void) setHighlighted: (BOOL) highlighted;
- (void) setHighlighted: (BOOL) highlighted
animated: (BOOL) animated;
- (void) setSelected: (BOOL) selected;
- (void) setSelected: (BOOL) selected
animated: (BOOL) animated;
并确保在调用超类方法后,按钮的selected
和 highlighted
状态会重置为NO
。