taoru's memo

Objective-c,cocos2d,など開発についてのメモ(andoroidも少しだけ)

UITableViewのCellを、タッチ中(highlight)だけ色を変える(半透明にしたい)

UITableViewのcellは、defaultのままだとタッチすると青くなる。

単純なセルの色変更なら、UITableViewDelegateのdidSelectRowAtIndexPath中でcellを取得した後に、

cell.selectionStyle = UITableViewCellSelectionStyleGlay;

などセットすれば色を変えられる。

Frameworkで提供されているのは以下の三種類だけ

typedef NS_ENUM(NSInteger, UITableViewCellSelectionStyle) {
    UITableViewCellSelectionStyleNone,    // 無色(無反応に見える)
    UITableViewCellSelectionStyleBlue,      // 青色
    UITableViewCellSelectionStyleGray       // 灰色
};


だが、これだとセル全体に色がついてしまう。

やりたいのは、ハイライト中にview部分だけ半透明にしたい。


そこで、UITableViewCellのクラスにあるsetHighlightedをオーバーライドする。

- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated
{
    [super setHighlighted:highlighted animated:animated];
    if (highlighted) {
        self.alpha = 0.5f;
    }else{
        self.alpha = 1.0f;
    }
}

これと合わせて UITableViewCellSelectionStyleNone にセットしておけば、タッチされている間だけ半透明になる。

highlight状態が変わる度にこのメソッドが呼ばれるので、応用がききそう。

QLOOKアクセス解析