Ios 在编辑模式下重新排序时更改UITableViewCell的背景色

Ios 在编辑模式下重新排序时更改UITableViewCell的背景色,ios,objective-c,uitableview,ios7,Ios,Objective C,Uitableview,Ios7,我正在开发一个包含UITableView的应用程序。用户需要做的唯一一件事就是对UITableView的内容重新排序。在编辑模式下,tableview单元格的背景色将变为透明。在对tableview单元格重新排序时,有没有办法保持其原始背景色 解决方案: 经过几次额外的搜索,我找到了(简单的)解决方案。 通过将cell.backgroundView.backgroundcolor添加到willDisplayCell方法,问题得到了解决。假设您的单元格颜色为红色 [cell setBackgro

我正在开发一个包含UITableView的应用程序。用户需要做的唯一一件事就是对UITableView的内容重新排序。在编辑模式下,tableview单元格的背景色将变为透明。在对tableview单元格重新排序时,有没有办法保持其原始背景色

解决方案:

经过几次额外的搜索,我找到了(简单的)解决方案。
通过将cell.backgroundView.backgroundcolor添加到willDisplayCell方法,问题得到了解决。

假设您的单元格颜色为红色

 [cell setBackgroundColor:[UIColor redColor]];
然后将tableview背景设置为相同

 tableView.backgroundColor = [UIColor redColor];

当iOS UI框架使您的单元格透明时,会出现各种情况。其中一个是突出显示/选定状态,另一个是重新排序情况

重要的是了解系统是如何做到这一点的。系统隐藏单元格背景(
cell.backgroundView
cell.selectedBackgroundView
),并将单元格中的每个视图的
backgroundColor
设置为透明色。因此,不可能使用
backgroundColor
来保持单元格不透明

最简单的解决方案是使用
drawRect:
添加一个简单的
UIView
,它将用颜色填充单元格

@interface MyColoredView : UIView

@property (nonatomic, strong, readwrite) UIColor *color;

@end

@implementation MyColoredView

- (void)setColor:(UIColor *)color {
    _color = color;

    [self setNeedsDisplay];
}

- (void)drawRect:(CGRect)rect {
    [self.color set];

    CGContextSetShouldAntialias(UIGraphicsGetCurrentContext(), true);
    CGContextFillRect(UIGraphicsGetCurrentContext(), self.bounds);
}

@end

将其添加到您的单元格(可能不是添加到
contentView
,而是直接添加到单元格),并将其框架设置为与单元格的边界相匹配。

为了让我的问题更精确一点,每个tableviewcell都有单独的颜色(如clear应用程序)。所以我想改变的是Tableviewcell的背景色。也因为它是透明的,当你移动到另一个单元格上时,你可以通过移动的单元格看到它下面的单元格。谢谢你的回复!我已经尝试了您的解决方案,tableviewcells已经从UIView初始化。但是当我将这些方法添加到UIView时,没有任何变化。当我重新排列它们时,它们仍然是透明的。如果你做得正确,它们就不可能是透明的。请显示您的代码。我想这是因为颜色在viewcontroller中声明并传递给单元格的UIView。我将试着在稍后发布我的代码。很好地解释了重新排序单元格时发生的事情!实现相同结果的另一种方法是重写
setBackgroundColor
并调用
[super-setBackgroundColor:[UIColor-whiteColor]]