我设置了一个自定义的UITableViewCell,并从UITableViewCell继承它。 我在我的表中使用它,一切正常,除非我选择单元格时,它会突出显示默认的蓝色,但文本消失了。一旦我发现文本又回来了。有谁知道如何解决它?
这是我正在使用的自定义单元格代码
#import "TableViewCell.h"
@implementation TableViewCell
@synthesize text;
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
}
return self;
}
- (void)setText:(NSString *)string {
text = [string copy];
[self setNeedsDisplay];
}
- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
[super setSelected:selected animated:animated];
}
- (void)drawRect:(CGRect)rect {
CGContextRef c = UIGraphicsGetCurrentContext();
CGGradientRef myGradient;
CGColorSpaceRef myColorspace;
size_t num_locations = 2;
CGFloat locations[2] = {0.0, 1.0};
CGFloat components[8] = {0.8f, 0.8f, 0.8f, 1.0f, // Bottom Colour: Red, Green, Blue, Alpha.
0.9f, 0.9f, 0.9f, 1.0}; // Top Colour: Red, Green, Blue, Alpha.
myColorspace = CGColorSpaceCreateDeviceRGB();
myGradient = CGGradientCreateWithColorComponents (myColorspace, components,
locations, num_locations);
CGColorSpaceRelease(myColorspace);
CGPoint startPoint, endPoint;
startPoint.x = 0.0;
startPoint.y = self.frame.size.height;
endPoint.x = 0.0;
endPoint.y = 0.0;
CGContextDrawLinearGradient (c, myGradient, startPoint, endPoint, 0);
const CGFloat topSepColor[] = { 0.8f, 0.8f, 0.8f, 1.0f }; // Cell Seperator Colour - Top
CGGradientRelease(myGradient);
CGContextSetStrokeColor(c, topSepColor);
CGContextMoveToPoint(c, 0.0, 0.0);
CGContextSetLineWidth(c, 1.0);
CGContextSetLineCap(c, kCGLineCapRound);
CGContextAddLineToPoint(c, self.frame.size.width, 0.0);
CGContextStrokePath(c);
const CGFloat bottomSepColor[] = { 0.5f, 0.5f, 0.5f, 1.0f }; // Cell Seperator Colour - Bottom
CGContextSetStrokeColor(c, bottomSepColor);
CGContextMoveToPoint(c, 0.0, self.frame.size.height);
CGContextSetLineWidth(c, 1.0);
CGContextSetLineCap(c, kCGLineCapRound);
CGContextAddLineToPoint(c, self.frame.size.width, self.frame.size.height);
CGContextStrokePath(c);
[[UIColor blackColor] set];
[text drawInRect:CGRectMake(10, self.frame.size.height / 3.5, self.frame.size.width - 20, self.frame.size.height - 10) withFont:[UIFont boldSystemFontOfSize:15] lineBreakMode:UILineBreakModeWordWrap];
}
- (void)dealloc {
[super dealloc];
[text release];
}
@end
答案 0 :(得分:1)
答案 1 :(得分:1)
Apple建议覆盖UITableViewCell的-drawRect。如果您真的想要自定义绘图,请在UIView子类中执行,然后将该类的实例添加为UITableViewCell的内容视图。 Apple也鼓励使用UIImageView作为单元格的背景视图,而不是使用自定义绘制的UIView子类(当然,在可能的情况下)。这不仅适用于单元格的背景视图。据我所知,在你的情况下可以使用UIImageView,因为-drawRect中的绘图代码没有以任何方式进行参数化,也就是说,没有外部依赖性。
你应该看一下:http://cocoawithlove.com/2009/04/easy-custom-uitableview-drawing.html
但是如果你不想采取另一种方法,那就是UILabel的highlightTextColor属性
答案 2 :(得分:0)
检查UITableViewCellStyle和UITableViewCellSelectionStyle的设置。它们在UITableViewCell类参考中进行了解释。默认选择样式具有蓝色背景,可能在该状态下“屏蔽”您的文本。