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状態が変わる度にこのメソッドが呼ばれるので、応用がききそう。