2011-07-21 3 views
1

CAGradientLayerを使用してグラデーションを追加したUITableViewCellがあります。これは正常に動作しますが、selectionStyleをUITableViewCellSelectionStyleBlueに設定した後でも、選択するとテーブルセルは青色に変わりません。グラデーションレイヤーを追加しないと、うまく動作します。UITableViewCellはピックアップしません。CAGradientLayerサブレイヤを追加するとUITableViewCellSelectionStyleBlueが表示されます。

これらのアイテムを連携させる方法はありますか?ここで

はcellForRowAtIndexPathの内側に私のコードです:

//cell gradient   
    CAGradientLayer *gradient = [CAGradientLayer layer]; 
    gradient.frame = CGRectMake(10, 0, 300, 50); 
    gradient.colors = [NSArray arrayWithObjects: 
         (id)[[UIColor colorWithRed:255/255.0 green:255/255.0 blue:255/255.0 alpha:1] CGColor], 
         (id)[[UIColor colorWithRed:255/255.0 green:255/255.0 blue:255/255.0 alpha:1] CGColor], 
         (id)[[UIColor colorWithRed:245/255.0 green:245/255.0 blue:245/255.0 alpha:1] CGColor], 
         (id)[[UIColor colorWithRed:247/255.0 green:247/255.0 blue:247/255.0 alpha:1] CGColor], 
         nil]; 
    gradient.locations = [NSArray arrayWithObjects: 
          (id)[NSNumber numberWithFloat:0.00], 
          (id)[NSNumber numberWithFloat:0.50], 
          (id)[NSNumber numberWithFloat:0.51], 
          (id)[NSNumber numberWithFloat:1.0],                       
          nil]; 
    [cell.layer insertSublayer:gradient atIndex:0]; 


    //bring back rounded corners by creating a masklayer 
    UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:gradient.bounds byRoundingCorners:UIRectCornerBottomRight|UIRectCornerBottomLeft cornerRadii:CGSizeMake(8, 8)]; 
    CAShapeLayer *maskLayer = [CAShapeLayer layer]; 
    maskLayer.frame = gradient.bounds; 
    maskLayer.path = maskPath.CGPath; 
    gradient.mask = maskLayer; 

    //add the cell shadow 
    cell.layer.shadowColor = [[UIColor blackColor] CGColor]; 
    cell.layer.shadowRadius = 3; 
    cell.layer.shadowOpacity = 0.5; 
    cell.layer.shadowOffset = CGSizeMake(0, 0); 

    cell.selectionStyle = UITableViewCellSelectionStyleBlue;  

答えて

2

あなたはUITableViewCellSelectionStyleBlueビューが表示されることがありselected-されたときに変化するビューの上にグラデーションをかけるかもしれないように見えますが、あなたはそれを見ることができません(テストする方法は、セルのグラデーションカバー部分のみです。選択されたときに他の部分の色が変わった場合は、これが問題です)。

UITableViewCellをサブクラス化してセルを選択すると、独自のカスタム描画を行うことができます。また、セルが選択されるたびにグラデーションが消える(セルが選択解除されたときに再び表示されます) 。

+0

これは何が起こっているかです。私はグラデーションの半分の幅をグラデーションの半分のフレームを青くしました。 touchesBeganのグラデーションを削除して削除する必要がありますか? – james

+0

私はそうは思わない。私はUITableViewCellをサブクラス化し、initメソッドでグラデーションを設定し、次に 'setSelected:animated:'メソッドをオーバーライドし、グラデーションを選択した場合== trueにしてスーパークラスを描画させるために '[super setSelected:animated:]'青のグラデーション。 – Carter

+0

ありがとう!私はあなたが記述したように動作させることができました。 – james

関連する問題