在编辑模式下重新排序时更改 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.backgroundView
或cell.selectedBackgroundView
),并且对于单元格中的每个视图,它会将backgroundColor
设置为透明色。因此,不能使用backgroundColor
来保持单元格不透明。
最简单的解决方案是添加一个简单的UIView
和drawRect:
,它将用颜色填充单元格。
@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 编辑模式下更改删除按钮标题 [重复]