如何摆脱表格单元格选择风格但仍然接收setSelected / setHighlighted调用

时间:2012-11-11 20:01:07

标签: ios cocoa-touch uitableview

我尝试了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仍然是白色的!如果我将其设置为redColorblueColor,则会显示为红色或蓝色,但是当我放置clearColor时,它会显示为白色。我想过用colorWithPatternImage使用透明的PNG图像设置背景,但我想避免这种情况。

我更喜欢尝试解决这个问题,因为依赖这两个方法调用会更加清晰,而且我还希望保留使用披露指示器,该指示器在选中时变为白色,否则如果我使用则会保持黑暗UITableViewCellSelectionNone

3 个答案:

答案 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;
}