我尝试了here提供的方法,除了我无法使selectedBackgroundView
透明,它保持白色外,一切正常。在我的自定义UITableViewCell
课程中,我有:
-(void)awakeFromNib {
UIView *bkgView = [[UIView alloc]initWithFrame:self.frame];
bkgView.alpha = 0.5;
bkgView.backgroundColor = [UIColor clearColor];
self.selectedBackgroundView = bkgView;
}
我还在[self setNeedsDisplay];
方法中调用了setSelected
。
我想要的是删除蓝色突出显示(来自UITableViewCellSelectionStyleBlue
,我不想将其设置为UITableViewCellSelectionNone
,因为它会禁用setHighlight/Selected
来电)并仍然拥有突出显示/选择调用方法。我几乎就在那里,只是selectedBackgorundView
仍然是白色的!如果我将其设置为redColor
或blueColor
,则会显示为红色或蓝色,但是当我放置clearColor
时,它会显示为白色。我想过用colorWithPatternImage
使用透明的PNG图像设置背景,但我想避免这种情况。
我更喜欢尝试解决这个问题,因为依赖这两个方法调用会更加清晰,而且我还希望保留使用披露指示器,该指示器在选中时变为白色,否则如果我使用则会保持黑暗UITableViewCellSelectionNone
。
答案 0 :(得分:1)
我建议使用tableView:willSelectRowAtIndexPath:并返回nil。 这样,当您选择Cell时,您仍会收到通知。但是,它实际上不会被选中,从那里你可以自己管理选择而无需处理控件的默认样式。
答案 1 :(得分:0)
使用selectedBackgroundView覆盖蓝色
在viewForRow中的:方法:
UIView *v = [[UIView alloc] initWithFrame:CGRectZero];
v.backgroundColor = [UIColor clearColor];
cell.selectedBackgroundView = v;
答案 2 :(得分:0)
设置背景视图和selectedBackgroundView:
UIView *view = [[UIView alloc] initWithFrame:CGRectZero];
view.backgroundColor = [UIColor whiteColor];
self.backgroundView = view;
view = [[UIView alloc] initWithFrame:CGRectZero];
view.backgroundColor = [UIColor clearColor];
self.selectedBackgroundView = view;
然后覆盖- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated
- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated
{
[super setHighlighted:highlighted animated:animated];
self.backgroundView.hidden = highlighted;
}