UITableViewCell
でカスタムサブレイヤーを作成するにはどうすればよいsetSelected:animated:
ですか?
環境:
次のように、の内部をUITableViewCell
追加して、カスタム背景レイヤーを追加しました。CAGradientLayer
drawRect:
- (void)drawRect:(CGRect)rect{
[super drawRect:rect];
[[self providerLabel] setTextColor:kOUBlue];
[self addGrayLayer];
}
- (void)addGrayLayer{
[[[self contentView] layer] insertSublayer:[self grayGradientLayer] atIndex:0];
}
- (CAGradientLayer *) grayGradientLayer{
if (!_grayGradientLayer) {
CAGradientLayer *gradient = [CAGradientLayer layer];
UIColor *white = [UIColor colorWithWhite:1 alpha:2];
UIColor *gray = [UIColor colorWithRed:0.96 green:0.96 blue:0.96 alpha:1];
[gradient setColors:@[(id)white.CGColor, (id)gray.CGColor]];
[gradient setFrame:[self bounds]];
_grayGradientLayer = gradient;
}
return _grayGradientLayer;
}
ユーザーがセルをタップしても、青色の強調表示は表示されません。だから私は次のように非表示にしようとしましCAGradientLayer
たsetSelected:animated:
:
- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
[super setSelected:selected animated:animated];
// Configure the view for the selected state
if (selected) {
[[self grayGradientLayer] setHidden:YES];
}else{
[[self grayGradientLayer] setHidden:NO];
}
[[self contentView] setNeedsDisplay];
}
青い背景が表示されますが、プッシュ アニメーションが始まるまで表示されません。デフォルトの青をすぐに表示させる方法はありますか? また、2番目の色を追加しCAGradientLayer
て手動で交換しようとしましたが、レイヤーを非表示にした直後にセルが再描画されないようsetSelected:
です.
setNeedsDisplay
運が悪かったので、セルを強制的に再描画しようとしました。何か案は?