【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などに色がある場合が
考えられます。