Change cell appearance on selection
As an iOS developer you might have run into situations where you want to change the cell appearance when particular cell is selected.
Naive approach to this would be (Which by the way I did before I came to know about this little trick) to keep track of two indexPaths
. (You can keep track of rows if tableView
has only one section. In this case your default section for indexPath
will be 0
).
The reason you will need to keep reference to two indexPath
is because when you select a row you can change the appearance. However, when another row is selected, you will have to change the appearance of newly selected row, but at the same time you have to reset the appearance of previously selected row. (Since that row is no longer selected). Besides, if you want to support multi-selection, things will get more complicated.
Fortunately, there is one easy solution
Create a UITableViewCell
subclass for tableView
cell and override following method.
- (void)setSelected:(BOOL)selected animated:(BOOL)animated
Make sure to call the
[super setSelected:selected animated:animated];
in the overridden method.
In the overridden method, check the value of selected
flag to update the cell appearance. (e.g. changing text color, fonts or even the cell background color)
e.g. in the following example I am updating the background color of UILabel
based on whether cell
is selected or not.
- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
[super setSelected:selected animated:animated];
if (selected) {
self.cellTitleLabel.backgroundColor = [UIColor greenColor];
} else {
self.cellTitleLabel.backgroundColor = [UIColor whiteColor];
}
}
To make things even simpler, I have created a demo of this example. You can find it as a subproject of my other iOS post. You can download it directly from GitHub project page.
Let me know if you have any other questions about this post. Happy coding and Happy New year