禁用背景颜色更改,但在UITableViewCell突出显示时启用文本颜色更改

时间:2015-03-24 11:04:17

标签: ios objective-c uitableview

我想让UITableViewCell文本颜色在选中时更改,但仅限于此。我想禁用单元格中的背景突出显示。我看到了类似的解决方案:

cell.selectionStyle = UITableViewCellSelectionStyleNone;

但这也会禁用文本颜色更改。我想以一种简单的方式实现这种行为吗?

5 个答案:

答案 0 :(得分:5)

cellForRowAtIndexPath中,执行:

步骤1.将您的选择样式设置为默认值。

cell.selectionStyle = UITableViewCellSelectionStyleDefault;

步骤2.将空视图设置为背景视图

UIView *view = [UIView new] ;
[view setBackgroundColor:[UIColor clearColor]];
[cell setSelectedBackgroundView:view];

步骤3.设置所需的文字颜色,比如说

[[cell textLabel] setTextColor:[UIColor orangeColor]];
[[cell textLabel] setHighlightedTextColor:[UIColor blackColor]];

希望,这有帮助。

答案 1 :(得分:1)

在自定义tableview单元格类中重写setSelected方法,并根据选择状态更新文本颜色。

例如:

- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
    [super setSelected:selected animated:animated];
    if (selected) {
        [self.textLabel setTextColor:[UIColor orangeColor]];
    } else {
        [self.textLabel setTextColor:[UIColor blackColor]];
    }
}

cellForRowAtIndexPath中禁用默认小区选择

[cell setSelectionStyle:UITableViewCellSelectionStyleNone];

答案 2 :(得分:0)

Cell.textLabel.textColor=[UIColor graycColor];
Cell.textLabel.backgroundColor = [UIColor blackColor];

cellForRowAtIndexPath

中尝试此操作

答案 3 :(得分:0)

您应该尝试使用-tableView:didSelectRowAtIndexPath:

然后你应该能够在单元格中定位文本(取决于它的设置方式,以及标签是否是单元格的属性)

答案 4 :(得分:0)

Swift 4 / iOS 11.2 / Xcode 9.2:

覆盖 setSelected 就是答案。

如果您希望默认行为加上其他一些更改,请单独留下 selectionStyle ,或将其设置为 .default

selectionStyle = .default

如果您想要所有自定义行为,请将其设置为 .none

selectionStyle = .none

无论哪种方式 - 即使您将其设置为 .none ,仍会调用被覆盖的 setSelected 。例如:

override func setSelected(_ selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)

    if selected {
        textLabel.textColor = orange
    } else {
        textLabel.textColor = black
    }
}