1

私が望む特定の外観を実現するために、カスタムセルを描いています。ただし、セルが選択されているかどうかに基づいて、別の描画を実行したいと考えています。デフォルトの色だけが欲しいわけではありません。

このメソッドでコンテンツのビューの背景色をビューに変更しました:

- (void)setSelected:(BOOL)selected animated:(BOOL)animated

ただし、正しく表示されませんでした。主に、アクセサリを考慮せず、アクセサリ インジケータまで色を付けただけです。これを達成するためのより良い方法はありますか?

- (void)drawRect:(CGRect)rect
{        
    CGContextRef context = UIGraphicsGetCurrentContext();

    // Background
    CGContextSetFillColorWithColor(context, CELL_BACKGROUND_COLOR);
    CGContextMoveToPoint(context, 0.0f, 0.0f);
    CGContextAddLineToPoint(context, rect.size.width, 0.0f);
    CGContextAddLineToPoint(context, rect.size.width, rect.size.height);
    CGContextAddLineToPoint(context, 0.0f, rect.size.height);
    CGContextClosePath(context);
    CGContextFillPath(context);

    // Top line
    CGContextSetStrokeColorWithColor(context, CELL_TOP_LINE_COLOR);
    CGContextSetLineWidth(context, CELL_LINE_WIDTH);
    CGContextSetLineCap(context, kCGLineCapSquare);
    CGContextMoveToPoint(context, 0.0f, 0.0f);
    CGContextAddLineToPoint(context, rect.size.width, 0.0f);
    CGContextStrokePath(context);

    //Bottom line
    CGContextSetStrokeColorWithColor(context, CELL_BOTTOM_LINE_COLOR);
    CGContextSetLineWidth(context, CELL_LINE_WIDTH);
    CGContextSetLineCap(context, kCGLineCapSquare);
    CGContextMoveToPoint(context, 0.0f, rect.size.height);
    CGContextAddLineToPoint(context, rect.size.width, rect.size.height);
    CGContextStrokePath(context);
}
4

3 に答える 3

0

drawRectプロパティに応じて、メソッドを変更し、色の設定方法を変更する必要があると思いますisSelected。setSelectedメソッドがメソッドによってオーバーライドされるため、setSelectedメソッドがコンテンツのビューの背景を変更しても、おそらく何も変更されませんdrawRect

于 2012-11-21T23:51:18.203 に答える
0

私はこれを使用しています:

if(self.highlighted || self.selected) {
    //set text color
    textColor = [UIColor colorWithRed:204.0/255.0 green:255.0/255.0 blue:0 alpha:1.0];

    //set background color
    [[UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.7] set];
    CGContextFillRect(context, r);
}

selectionStyleセルのプロパティも確認してください。

于 2012-11-22T00:06:04.373 に答える
0

うまく機能するソリューションを見つけました。これは、アクセサリ インジケーターのように、デフォルトのアクセサリ ビューの下にも描画されます。BackgroundView と SelectedBackgroundView というカスタム ビューを作成しました。drawRect メソッドを使用してカスタム描画を作成するだけです。それはうまく機能し、パフォーマンスは問題ないようです。誰かが完全なコードを見たい場合はお知らせください。

[cell setBackgroundView:[[BackgroundView alloc] init]];
[cell setSelectedBackgroundView:[[SelectedBackgroundView alloc] init]];
于 2012-11-22T01:22:32.677 に答える