自定义UITableViewCell不突出显示文本

时间:2011-04-25 17:15:28

标签: iphone objective-c cocoa-touch

我设置了一个自定义的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

3 个答案:

答案 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类参考中进行了解释。默认选择样式具有蓝色背景,可能在该状态下“屏蔽”您的文本。