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

Posted

技术标签:

【中文标题】在编辑模式下重新排序时更改 UITableViewCell 的背景颜色【英文标题】:Change background color of UITableViewCell when reordering in editing mode 【发布时间】:2014-01-10 09:39:26 【问题描述】:

我正在开发一个包含 UITableView 的应用程序。用户唯一需要做的就是重新排序 UITableView 的内容。在编辑模式下,表格视图单元格的背景颜色变为透明。有什么方法可以在重新排序时保持 tableview 单元格的原始背景颜色?

解决方案:

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

【问题讨论】:

【参考方案1】:

ios UI 框架会使您的单元格透明的情况有多种。其中一个是高亮/选中状态,另一个是重新排序的情况。

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

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

@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,而是直接添加到单元格)并设置其框架以匹配单元格的边界。

【讨论】:

感谢您的回复!我已经尝试过您的解决方案,tableviewcells 已经从 UIView 初始化。但是当我将这些方法添加到 UIView 时没有任何改变。当我重新排序它们时它们仍然是透明的。 如果操作正确,它们就不会透明。请出示您的代码。 我认为这是因为颜色是在视图控制器中声明并传递给单元格的 UIView 的。稍后我会尝试发布我的代码。 很好地解释了重新排序单元格时发生的事情!实现相同结果的另一种方法是覆盖 setBackgroundColor 并改为调用 [super setBackgroundColor:[UIColor whiteColor]]【参考方案2】:

假设你的单元格颜色是红色

 [cell setBackgroundColor:[UIColor redColor]];

然后将tableview背景设置为相同。

 tableView.backgroundColor = [UIColor redColor];

【讨论】:

为了让我的问题更准确一点,每个 tableviewcell 都有单独的颜色(如 clear 应用程序)。所以它真的是我想改变的 Tableviewcell 背景颜色。也因为它变成透明的,当你在另一个单元格上移动时,你可以通过移动的单元格看到它下面的单元格。

以上是关于在编辑模式下重新排序时更改 UITableViewCell 的背景颜色的主要内容,如果未能解决你的问题,请参考以下文章

在 UITableView 编辑模式下更改删除按钮标题 [重复]

具有可变行高的 UITableview 在重新排序时崩溃

UITableView 在表格内点击重新排序

进入编辑/重新排序模式时的 UITableViewCell 自定义绘图和动画

UITableView 核心数据重新排序(下)

重新排序 UITableView 单元格并跟踪索引