UITableViewCell的条件背景颜色

时间:2014-03-12 08:53:09

标签: ios objective-c xcode uitableview colors

我试图为子类UITableViewCell设置背景颜色。我知道通常我应该使用tableView:willDisplayCell:forRowAtIndexPath:。但是,我有一些逻辑可以自定义UITableViewCelltableView:cellForRowAtIndexPath:的几个方面,我想根据该逻辑设置单元格的背景颜色。我是否必须复制tableView:cellForRowAtIndexPath: tableView:willDisplayCell:forRowAtIndexPath:中的所有条件以设置背景颜色?这种代码重复似乎很浪费,而且可能是不明智的。

我能想到的最佳解决方案是将一个UIColor属性添加到UITableViewCell子类,根据那里的条件在tableView:cellForRowAtIndexPath:中设置它,并且只需tableView:willDisplayCell:forRowAtIndexPath:设置单元格& #39;背景颜色为其自身的颜色属性。这是处理这种情况的正确方法吗?它似乎有点笨重,但我无法想到更好的东西。

1 个答案:

答案 0 :(得分:1)

您可以创建返回适当颜色的函数,并按照

进行相应设置
-(UIColor*)getColorForIndexPath:(NSIndexPath*){
    UIColor *cellColor=nil;
    //Do whatever your logic is for finding appropriate color assign to cellColor
    return cellColor;
}

现在使用此功能将colorcolor设置为,因此您只需修改一个地方即可在两个地方生效。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    .... //Your code for cell

    cell.backgroundColor = [self getColorForIndexPath:indexPath];
}

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{
    .... //Your code for cell

    cell.backgroundColor = [self getColorForIndexPath:indexPath];
}

注意:如果您只放置在任何委托方法中,这仍然有效,因此无需在2个地方调用。