我将UITableViewCell子类化为将单元格背景颜色设置为我需要的颜色:
·H
@interface DataViewCustomCell : UITableViewCell {
UIColor* cellColor;
UIColor* standardColor;
}
- (void) setCellColor: (UIColor*)color;
@end
的.m
@implementation DataViewCustomCell
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
// Initialization code
}
return self;
}
- (void) setCellColor: (UIColor*)color
{
cellColor = color;
}
- (void) spreadBackgroundColor: (UIView*)that withColor: (UIColor*)bkColor
{
NSEnumerator *enumerator = [that.subviews objectEnumerator];
id anObject;
while (anObject = [enumerator nextObject]) {
if([anObject isKindOfClass: [UIView class]])
{
((UIView*)anObject).backgroundColor = bkColor;
[self spreadBackgroundColor:anObject withColor:bkColor];
}
}
}
- (void) layoutSubviews {
[super layoutSubviews]; // layouts the cell as UITableViewCellStyleValue2 would normally look like
if(!self.selected && NULL != cellColor)
{
[self spreadBackgroundColor:self withColor:cellColor];
}
}
- (void)dealloc
{
[super dealloc];
}
@end
当我用我想要的颜色调用setCellColor时,一切顺利,但是当我找不到恢复原始颜色的方法时:当我用UITableViewStylePlain样式设置[UIColor clearColor]
时结果不好 - 找。
如果没有缺少细胞分离线,我怎样才能获得良好的结果?
答案 0 :(得分:10)
我遇到了类似的问题并找到了edo42的答案。然而,我在单元格中的文本背后有一个问题,没有显示我设置的背景颜色。我相信这是由于风格:UITableViewCellStyleSubtitle。
如果其他人偶然发现这个问题,我相信在这个问题中可以找到更好的解决方案:
UITableViewCellStyleSubtitle标签的BackgroundColor? BackgroundColor of UITableViewCellStyleSubtitle labels?
答案在此重印:
要更改表格视图单元格的背景颜色,您需要在tableView中设置它:willDisplayCell:forRowAtIndexPath:而不是tableView:cellForRowAtIndexPath:否则它不会产生任何影响,例如:
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
cell.backgroundColor = [UIColor whiteColor];
}
答案 1 :(得分:8)
最后,我自己解决了这个问题。我在- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
中使用了以下代码而不是子类:
UIView *bg = [[UIView alloc] initWithFrame:cell.frame];
bg.backgroundColor = [UIColor greenColor]; //The color you want
cell.backgroundView = bg;
cell.textLabel.backgroundColor = bg.backgroundColor;
[bg release];
答案 2 :(得分:0)
为什么在设置新单元格颜色之前不要捕获UIColor变量中的旧单元格颜色。 尝试 UIColor * originalColor = anObject.backgroundColor; 然后当你想要改回来时,只需将单元格颜色改为originalColor。
答案 3 :(得分:0)
我发现最好从自定义单元格的.m文件中调整颜色,而不是tableViewController。看起来更直观,而且更容易一些。只需根据需要调整颜色:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
和
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
注意:请确保在通话结束时也调用这些方法的超级,例如如果你想让你的手机保持绿色触摸:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
self.backgroundColor = [UIColor greenColor];
[super touchesBegan:touches withEvent:event];
}
另外,根据我的经验,不值得调整touchesEnded中的颜色,因为您的手机通常无法及时调整以便用户快速选择。
答案 4 :(得分:0)
根据Apple文档
,你应该总是在willDisplayCell:forRowAtIndex而不是cellForRowAtIndex方法中为单元格提供更改这个作品!!
答案 5 :(得分:0)
更改以下委托方法中的颜色:
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
if (...){
cell.backgroundColor = [UIColor blueColor];
} else {
cell.backgroundColor = [UIColor whiteColor];
}
}