0

我已经尝试过这里介绍的方法,除了我不能使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遗骸是白色的!如果我将它设置为redColoror blueColor,它会显示为红色或蓝色,但是当我设置它时,它会clearColor显示为白色。我考虑过colorWithPatternImage使用透明的 PNG 图像设置背景,但我想避免这种情况。

我更喜欢尝试解决这个问题,因为依赖这两个方法调用要干净得多,而且我还想保留公开指示符的使用,该指示符在选择时变为白色,否则如果我使用UITableViewCellSelectionNone.

4

3 回答 3

1

我建议使用 tableView:willSelectRowAtIndexPath: 并返回 nil。这样,当要选择单元格时,您仍然会收到通知。但是,它实际上不会被选中,您可以从那里自己管理选择,而无需处理控件的默认样式。

于 2012-11-11T20:44:58.597 回答
0

您使用 selectedBackgroundView 覆盖蓝色

在 viewForRow: 方法中:

     UIView *v = [[UIView alloc] initWithFrame:CGRectZero];
    v.backgroundColor = [UIColor clearColor];
    cell.selectedBackgroundView = v;
于 2012-11-11T20:15:08.353 回答
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;
}
于 2012-11-11T23:06:06.780 回答