如何制作一个UITableViewCell来改变文字颜色但不选择*背景颜色?

时间:2015-02-22 23:18:32

标签: ios objective-c uitableview

我有一个普通的旧UITableViewCell,它有黑色文本,背景为黑色,上面和下面都有分隔符。

我想要的是当单元格突出显示或选中时,文本变为绿色但没有其他变化。如果没有子类化UITableViewCell,这可能吗?如果没有,那么确保子类变化尽可能少的最佳方法是什么?

2 个答案:

答案 0 :(得分:0)

子类化单元格,覆盖方法setSelected:

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

    _myLabel.textColor = (selected) ? [UIColor orangeColor] : [UIColor blackColor];
}

答案 1 :(得分:0)

是的,没有子类化您的单元格是可能的。 (仅供参考我现在在手机上输入这个,所以这个答案可能有些错误......但我认为一般的想法是正确的......)

首先,将单元格的选择样式设置为" none"防止背景颜色在选择时改变。其次,根据是否选择了单元格,在cellForRowAtIndexPath中设置标签的文本颜色,例如:

NSMutableArray *selectedCells;

- (void)viewDidLoad {
    selectedCells = [[NSMutableArray alloc] init];
    self.tableView.allowsMultipleSelection = YES;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    // ... Create cell ...
    cell.selectionStyle = UITableViewCellSelectionStyleNone;
    if ([selectedCells containsObject:indexPath]) {
        cell.textLabel.textColor = [UIColor greenColor];
    } else {
        cell.textLabel.textColor = [UIColor blackColor];
    }

    // ...the other code...
}

// If a cell's selected add it to the selectedCells array, if
// deselected, remove it; then reload the table
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    if ([selectedCells containsObject:indexPath]) {
        [selectedCells removeObject:indexPath];
    } else {
        [selectedCells addObject:indexPath];
    }
    [tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationNone];
}