自定义UITableViewCell选择风格?

时间:2012-08-12 06:23:20

标签: ios objective-c uitableview click selection

当我点击我的UITableViewCell时,当我点击单元格时,背景部分(我的背景图像未覆盖的区域)变为蓝色。此外,单击时,单元格上的所有UILabel都会变为白色,这就是我想要的。

然而,当我点击它时,我不想要的是蓝色背景但是如果我selectionstylenone,那么我将丢失单元格中UILabel s的突出显示颜色。

有没有办法在单击单元格时去除蓝色背景但是保留UILabel s的突出显示颜色?

10 个答案:

答案 0 :(得分:166)

您可以按照以下方式执行此操作。将表格单元格的选择样式设置为UITableViewCellSelectionStyleNone。这将删除突出显示的蓝色背景。然后,要使文本标签突出显示以您希望的方式工作,而不是使用默认的UITableViewCell类,请创建UITableViewCell的子类并使用您自己的实现来覆盖setHighlighted:animated的默认实现,以设置标签根据突出显示的状态,你想要的颜色。

- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated
{
    if (highlighted) {
        self.textLabel.textColor = [UIColor whiteColor];
    } else {
        self.textLabel.textColor = [UIColor blackColor];
    }
}

答案 1 :(得分:71)

如果在iOS7之前工作,请选择无格式

cell.selectionStyle = UITableViewCellSelectionStyleNone;

否则,请UITableViewCellSelectionStyleDefault

离开

然后:

UIView *selectedView = [[UIView alloc]init];
selectedView.backgroundColor = [UIColor redColor];
cell.selectedBackgroundView =  selectedView;

此代码可以正常使用

答案 2 :(得分:16)

将选择样式设置为none后,可以使用以下委托方法:

-(NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath

在此处实施您的代码,就像这样

-(NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    CustomCell *cell = (CustomCell *)[tableView cellForRowAtIndexPath:indexPath];
    [cell.lbls setTextColor:[UIColor whiteColor]];
    return indexPath;
}

答案 3 :(得分:12)

在cellForRowAtIndexPath中使用以下代码:

[cell setSelectionStyle:UITableViewCellSelectionStyleNone];

[cell.myLabel setHighlightedTextColor: [UIColor whiteColor]]; // for all your labels

希望这对你有用。

享受编码:)

答案 4 :(得分:11)

要完成这项工作,您必须将选择样式设置为UITableViewCellSelectionStyleNone,然后您应该覆盖方法setSelected:animated:以获得所需的结果。当你看到蓝色(或灰色)选择时,iOS的自动选择机制也是如此。

- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
    if (selected) {
        self.textLabel.textColor = [UIColor whiteColor];
    } else {
        self.textLabel.textColor = [UIColor blackColor];
    }
}

您还可以通过其他方式对其进行自定义,例如通过更改UITableViewCell背景等

答案 5 :(得分:4)

覆盖UITableViewCell

子类中的以下函数
override func setHighlighted(highlighted: Bool, animated: Bool) { }
override func setSelected(selected: Bool, animated: Bool) { }

答案 6 :(得分:2)

为了匹配标准选择样式行为,您需要覆盖setHighlighted:animated:setSelected:animated:。您可能希望将该代码移动到共享方法中,以避免重复代码。

override func setHighlighted(highlighted: Bool, animated: Bool) {

    setAsSelectedOrHighlighted(highlighted, animated: animated)
    super.setHighlighted(highlighted, animated: animated)
}

override func setSelected(selected: Bool, animated: Bool) {

    setAsSelectedOrHighlighted(selected, animated: animated)
    super.setSelected(selected, animated: animated)
}

func setAsSelectedOrHighlighted(selectedOrHighlighted: Bool, animated: Bool) {

    let action = {
        // Set animatable properties
    }

    if animated {
        UIView.animateWithDuration(1.0, delay: 0, options: .CurveEaseInOut, animations: action, completion: nil)
    }
    else {
        action()
    }
}

答案 7 :(得分:0)

在自定义单元格中,覆盖awakeFromNib&的默认实现。 setSelected:

- (void)awakeFromNib {
    // Initialization code
    UIImageView * imageView = [[UIImageView alloc] initWithFrame:self.bounds];
    imageView.image = [UIImage imageNamed:@"cell_selected_img"];
    self.selectedBackgroundView = imageView;
}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
    [super setSelected:selected animated:animated];

    // Configure the view for the selected state
    if (selected) {
        self.lblCustomText.textColor = [UIColor whiteColor];
    } else {
        self.lblCustomText.textColor = [UIColor blackColor];
    }
}

还要确保选择样式 设置为

答案 8 :(得分:0)

我能让它发挥作用的唯一方法是:

- (void)awakeFromNib {
    UIView *bgColorView = [[UIView alloc] init];
    bgColorView.backgroundColor = [UIColor colorWithRed:(55.0/255.0) green:(163.0/255.0) blue:(237.0/255.0) alpha:1.0];
    bgColorView.layer.masksToBounds = YES;
    self.selectedBackgroundView = bgColorView;
}

答案 9 :(得分:0)

还可以使用contentView.alpha。这是示例。

首先,为您的单元格设置选择样式:

[cell setSelectionStyle:UITableViewCellSelectionStyleNone];

接下来,在自定义单元格类中,使用动画示例覆盖此方法:

  - (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated {
    [super setHighlighted:highlighted animated:animated];

    if (highlighted) {
        [UIView animateWithDuration:0.15f animations:^{
            self.contentView.alpha = 0.5f;
        }];
    } else {
        [UIView animateWithDuration:0.35f animations:^{
            self.contentView.alpha = 1.f;
        }];
    }
  }