0

UITableViewCellでカスタムサブレイヤーを作成するにはどうすればよいsetSelected:animated:ですか?

環境:

次のように、の内部をUITableViewCell追加して、カスタム背景レイヤーを追加しました。CAGradientLayerdrawRect:

- (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;
}

ユーザーがセルをタップしても、青色の強調表示は表示されません。だから私は次のように非表示にしようとしましCAGradientLayersetSelected: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運が悪かったので、セルを強制的に再描画しようとしました。何か案は?

4

1 に答える 1

0

掘り下げた後、この質問を見つけました。間違った方法を使用していることに気付きました。メソッドを使用する必要があったことがわかりましたsetHighlighted:animated:

私の新しいコードは次のようになります。

- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated{

   [super setHighlighted:highlighted animated:animated];

   if (highlighted) {
     [[self grayGradientLayer] setHidden:YES];
   }else{
     [[self grayGradientLayer] setHidden:NO];
   }
}
于 2012-11-12T20:47:35.027 に答える