iOS:背景颜色 - UITableView和Accessory具有相同的背景颜色

时间:2013-04-19 19:28:23

标签: ios objective-c uitableview uisearchbar

我有一个UISearchBar。当我选择单元格时,我希望整个单元格都有[UIColor grayColor];

使用下面的代码,contentView颜色显示为Gray;但是,背景accessoryType颜色显示为蓝色:

enter image description here

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {     

UITableViewCell *cell = [self.searchDisplayController.searchResultsTableView cellForRowAtIndexPath:indexPath];
    cell.contentView.backgroundColor = [UIColor grayColor];

    if (self.lastSelected && (self.lastSelected.row == indexPath.row))
    {
        cell.accessoryType = UITableViewCellAccessoryNone;
        [cell setSelected:NO animated:TRUE];
        self.lastSelected = nil;
    } else {
        cell.accessoryType = UITableViewCellAccessoryCheckmark;
        cell.accessoryView.backgroundColor = [UIColor grayColor]; // Not working
        [cell setSelected:TRUE animated:TRUE];

        UITableViewCell *old = [self.searchDisplayController.searchResultsTableView cellForRowAtIndexPath:self.lastSelected];
        old.accessoryType = UITableViewCellAccessoryNone;
        [old setSelected:NO animated:TRUE];
        self.lastSelected = indexPath;
    }

如何使蓝色也显示为[UIColor grayColor]?

1 个答案:

答案 0 :(得分:10)

您正在更改内容视图的背景颜色,该视图只是单元格视图的一部分。

UITableViewCell representation

更改整个单元格的背景颜色。但是,您无法在tableView:didDeselectRowAtIndexPath:中执行此操作,因为它无法按照here的说明运行。

  

注意:如果要更改单元格的背景颜色(通过UIView声明的backgroundColor属性设置单元格的背景颜色),必须在{{1}中执行此操作委托的方法,而不是数据源的tableView:willDisplayCell:forRowAtIndexPath:

在您的情况下,通过将索引保存在ivar中并重新加载表格视图来跟踪tableView:cellForRowAtIndexPath:中选择的行。

tableView:didSelectRowAtIndexPath: