【Objective-C】UITableViewで押下時のグレー背景を自由な色に変更する方法【Xcode10.2対応】

こういう人に向けて発信しています。
・TableView押下時の背景色を変更したい人
・押下時の色を自由な色に変更したい人
・Objective-C中級者

完成イメージ

導入にあたって必要なもの

・TableViewCell(カスタムセル の採用)

必要な記述

(1)TableView描画デリゲートメソッド内で

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
...省略
   //セルの押下時の色彩を確定させる None=何もしない。
   cell.selectionStyle = UITableViewCellSelectionStyleNone;
   return cell;
}

(2)カスタムセル (UITableViewCell)内で

- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
   [super setSelected:selected animated:animated];
   if (selected) {
       //押下時のセルの処理
       self.backgroundColor = [UIColor redColor];
   }else{
       //押下されていないセルの処理
       self.backgroundColor = [UIColor clearColor];
   }
}

上記だけで好きな色に変更が可能です。

クラス構成

・TableView(h/m)
・TableViewCell(h/m)

コード

//TableView.h
#import <UIKit/UIKit.h>
@interface TableViewController : UITableViewController
@end


//TableView.m
#import "TableViewController.h"
#import "TableViewCell.h"


@interface TableViewController ()

@end

@implementation TableViewController

- (void)viewDidLoad {
   [super viewDidLoad];
   self.tableView.tableFooterView = [[UIView alloc]init];
   
   // カスタムセルを使用  //標準セルを使う時には書きませんでしたが、カスタムセルを使用する際は必要になります。
   UINib *nib = [UINib nibWithNibName:@"TableViewCell" bundle:nil];
   [self.tableView registerNib:nib forCellReuseIdentifier:@"CustomCell"];
   
   
}

#pragma mark - Table view data source


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
#warning Incomplete implementation, return the number of rows
   return 30;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
   //標準で用意されているTableViewを利用する場合。
   //カスタムセルを使用する場合
   TableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CustomCell" forIndexPath:indexPath];
   
   //もしcellが初期化されないでnilの場合は標準で用意されているセルを使いましょう。
   if (!cell) {
       cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cell"];
   }
   
   cell.textLabel.text = [NSString stringWithFormat:@"このセルは%ld番目のセルになります!", (long)indexPath.row];
   //セルの押下時の色彩を確定させる None=何もしない。
   cell.selectionStyle = UITableViewCellSelectionStyleNone;
   return cell;
}

@end
//TableViewCell.h

#import <UIKit/UIKit.h>
@interface TableViewCell : UITableViewCell
@end


//TableViewCell.m

#import "TableViewCell.h"
#define RGB(r, g, b) [UIColor colorWithRed:(r)/255.0 green:(g)/255.0 blue:(b)/255.0 alpha:1]
#define RGBA(r, g, b, a)    [UIColor colorWithRed:(r)/255.0 green:(g)/255.0 blue:(b)/255.0 alpha:(a)]

@implementation TableViewCell

- (void)awakeFromNib {
   [super awakeFromNib];
   // Initialization code
}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
   [super setSelected:selected animated:animated];
   if (selected) {
       //押下時のセルの処理
       self.backgroundColor = [UIColor redColor];
   }else{
       //押下されていないセルの処理
       self.backgroundColor = [UIColor clearColor];
   }
}

@end

追記:上記追記を行っても反映されない場合

そもそもカスタムセルの上に乗っているViewなどに色がある場合が
考えられます。


いいなと思ったら応援しよう!