我将 UITableViewCell 子类化以将单元格背景颜色设置为我需要的颜色:

。H

@interface DataViewCustomCell : UITableViewCell {
    UIColor* cellColor;
    UIColor* standardColor;
}
- (void) setCellColor: (UIColor*)color;

@end

.m
@implementation DataViewCustomCell

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        // Initialization code
    }
    return self;
}

- (void) setCellColor: (UIColor*)color
{
    cellColor = color;
}

- (void) spreadBackgroundColor: (UIView*)that withColor: (UIColor*)bkColor
{
    NSEnumerator *enumerator = [that.subviews objectEnumerator];
    id anObject;

    while (anObject = [enumerator nextObject]) {
        if([anObject isKindOfClass: [UIView class]])
        {
            ((UIView*)anObject).backgroundColor = bkColor;
            [self spreadBackgroundColor:anObject withColor:bkColor];
        }
    }
}

- (void) layoutSubviews {
    [super layoutSubviews]; // layouts the cell as UITableViewCellStyleValue2 would normally look like

    if(!self.selected && NULL != cellColor)
    {
        [self spreadBackgroundColor:self withColor:cellColor];
    }
}

- (void)dealloc
{
    [super dealloc];
}

@end

当我用我想要的颜色调用 setCellColor 时,一切顺利,但是当我没有找到一种方法来设置原始颜色时:当我用 UITableViewStylePlain 样式设置 [UIColor clearColor] 时,结果并不好看。



如何在不丢失单元格分隔线的情况下取得良好的效果?

最佳答案

我遇到了类似的问题,并找到了 edo42 的答案。但是,我当时遇到了一个问题,即单元格中文本后面的背景没有显示我设置的背景颜色。我相信这是由于样式:UITableViewCellStyleSubtitle。

如果其他人偶然发现这个问题,我相信在这个问题中可以找到更好的解决方案:

UITableViewCellStyleSubtitle标签的BackgroundColor?
BackgroundColor of UITableViewCellStyleSubtitle labels?

答案转载于此:

要更改表格 View 单元格的背景颜色,您需要在 tableView:willDisplayCell:forRowAtIndexPath: 而不是 tableView:cellForRowAtIndexPath: 中设置它,否则它不会有任何效果,例如:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
    cell.backgroundColor = [UIColor whiteColor];
}

10-08 05:18