这个问题已被问过几次,但似乎没有任何解决方案。
UITableView reorder hides background
Subviews of UITableViewCell are not visible while reordering
Reordering causing subview 's backround color to clear
我有一个带UILabel的自定义tableview单元格。当tableview处于编辑模式并且我拖动单元格以重新排序时,UILabel的背景变为清晰的颜色。我还发现,如果我尝试重新排序所选单元格(我的tableview允许在编辑模式下进行多次选择),则子视图的背景颜色会保留。
我在CustomCell中尝试了下面的方法,但是当拖动单元格时,它们都没有覆盖子视图的背景颜色。
我希望子视图的背景颜色保持不变。有没有我错过的方法?或者Apple以这种方式设计它?
- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
[super setSelected:selected animated:animated];
if (selected) {
if (self.isEditing) {
self.customLabel.backgroundColor = [UIColor blueColor];
}
else {
self.customLabel.backgroundColor = [UIColor blueColor];
}
}
else {
self.customLabel.backgroundColor = [UIColor blueColor];
}
}
- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated {
[super setHighlighted:highlighted animated:animated];
if (highlighted) {
if (self.isEditing) {
self.customLabel.backgroundColor = [UIColor blueColor];
}
else {
self.customLabel.backgroundColor = [UIColor blueColor];
}
}
else {
self.customLabel.backgroundColor = [UIColor blueColor];
}
}
- (void)setEditing:(BOOL)editing animated:(BOOL)animated {
[super setEditing:editing animated:animated];
if (editing) {
self.customLabel.backgroundColor = [UIColor blueColor];
}
else {
self.customLabel.backgroundColor = [UIColor blueColor];
}
}
答案 0 :(得分:4)
为Swift 3添加现代解决方案。
创建一个新的.swift文件并创建一个自定义的UIView类:
import UIKit
class NeverClearView: UIView {
override var backgroundColor: UIColor? {
didSet {
if backgroundColor?.cgColor.alpha == 0 {
backgroundColor = oldValue
}
}
}
}
在Interface Builder中,转到Identity Inspector并将类设置为闪亮的新NeverClearView类。这将阻止它在细胞重新排序期间消失。
此解决方案也适用于其他UIKit组件,例如我不得不在一秒钟之前为UIStepper做同样的事情。
答案 1 :(得分:1)
您可以创建自定义UILabel。并重载-drawRect。
@interface VALAbel:UILabel
@property (nonatomic, strong) UIColor *bac_color;
@end
@implementation VALabel
-(void)setBac_color:(UIColor *)bac_color
{
_bac_color = bac_color;
[self setNeedsDisplay];
}
- (void)drawRect:(CGRect)rect {
[self.bac_color set];
CGContextSetShouldAntialias(UIGraphicsGetCurrentContext(), true);
CGContextFillRect(UIGraphicsGetCurrentContext(), self.bounds);
[super drawRect:rect];
}
@end
这会对你有所帮助!