取消选择后,单元格背景颜色仍然存在。

时间:2014-06-17 07:53:31

标签: ios uitableview

我有一个tableView。在选择任何行时,我正在推送另一个viewcontroller。我正在改变所选单元格的颜色。但是现在当我从其他viewcontroller返回并选择另一行时,之前选择的单元格颜色保持不变。我已经做了以下更改,但它无法正常工作。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
[tableView deselectRowAtIndexPath:[tableView indexPathForSelectedRow] animated:YES];
}
-(void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath{
    UITableViewCell *cell=[tableView cellForRowAtIndexPath:indexPath];
    cell.backgroundColor=[UIColor whiteColor];
}

这就是我将背景颜色应用于单元格的方式:

-(UIView *)selectedCellView{
    UIView *cellView=[[UIView alloc]init];
    //cellView.backgroundColor=RGB(155,130,110);
    cellView.backgroundColor=[UIColor lightGrayColor];
    return cellView;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
...
cell.selectedBackgroundView=[self selectedCellView];
...
}

2 个答案:

答案 0 :(得分:0)

每次用户滚动tableView时都会调用

cellForRowAtIndexPath,这意味着您要为每个滚动分配一个UIView实例。这会在defaultSelectionView上方添加一个视图。更简单的方法是更改​​cell.contentView.backgroundColor中的didSelectRowAtIndexPath并将其更改回didDeselectRowAtIndexPath

中的上一个值

答案 1 :(得分:0)

cellForRowAtIndexPath每当创建单元格时调用此方法,因此根据单元格的数量,将调用它。因此,您只需更改in didSelectRowAtIndexPath方法,然后在didDeselectRowAtIndexPath方法中更改回原始颜色即可。您还可以使用突出显示选项显示cell.selectionStyle的所选单元格。还有一件事情不需要在didDeselectRowAtIndexPath中简单地调用didSelectRowAtIndexPath方法你可以改变颜色并推送或呈现你的第二个视图控制器,并且在推或呈现改变颜色的细胞之前回到原来的颜色。