カスタム描画デザインを実装するカスタム UITableViewCell クラスがあります (ご覧のとおり、セルには影の効果があります)。以下に示すように、最初のセルを白色でペイントしようとしています。他のセルは灰色にする必要があります。
- (void)drawRect:(CGRect)rect {
CGContextRef context = UIGraphicsGetCurrentContext();
CGColorRef whiteColor = [UIColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:1.0].CGColor;
if (_rowNumber == 0)
CGColorRef lightColor = [UIColor whiteColor].CGColor;
else
CGColorRef lightColor = [UIColor grayColor].CGColor;
CGColorRef darkColor = _darkColor.CGColor;
CGColorRef shadowColor = [UIColor colorWithRed:0.1 green:0.1 blue:0.1 alpha:0.5].CGColor;
CGContextSetFillColorWithColor(context, whiteColor);
CGContextFillRect(context, _paperRect);
CGContextSaveGState(context);
CGContextSetShadowWithColor(context, CGSizeMake(0, 2), 7.0, shadowColor);
CGContextSetFillColorWithColor(context, lightColor);
CGContextFillRect(context, _coloredBoxRect);
CGContextRestoreGState(context);
}
問題は、dequeueReusableCellWithIdentifier を使用している場合、「drawRect」メソッドが 3 回しか呼び出されないため (セルの高さが 200)、4 番目のセルが最初のセルと同じ色になることです。
この問題を管理する方法はありますか? ありがとう
更新 UITableViewController からカスタム再描画メソッドを呼び出そうとしましたが、「null」コンテキスト エラーが発生しました
- (void)refreshColorOfRow:(int)row{
CGContextRef context = UIGraphicsGetCurrentContext();
if (row > 0)
_lightColor = [UIColor colorWithRed:200.0f/255.0f green:199.0f/255.0f blue:200.0f/255.0f alpha:1.0];
else
_lightColor = [UIColor colorWithRed:240.0f/255.0f green:240.0f/255.0f blue:240.0f/255.0f alpha:1.0];
CGColorRef lightColor = _lightColor.CGColor;
CGContextSetFillColorWithColor(context, lightColor);
CGContextFillRect(context, _coloredBoxRect);
CGContextRestoreGState(context);
}