I need to change the selected cell background colour for all the cells in my app. As I know there is a way to use UIAppearance
protocol for this purposes. Is it possible to realize this by the category for UITableViewCell
?

- 2,923
- 2
- 24
- 44
3 Answers
Using appearance proxy you can colour all cells. Don't know if you can target specific category.
To do the colouring put following code in your AppDelegate.m file:
Put [self customCellBackground];
in - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions
and somewhere at the end:
- (void)customCellBackground {
UIView *cellBackgroundView =[[UIView alloc] init];
cellBackgroundView.backgroundColor = [UIColor blackColor];
[[UITableViewCell appearance] setSelectedBackgroundView:cellBackgroundView];}

- 1,885
- 2
- 14
- 18
-
1Wouldn't recommend chucking stuff like this into the AppDelegate. At least wrap it in a class which handles global styling and let the AppDelegate call that on startup. – GraemeArthur Mar 11 '15 at 12:39
As null's answer is not for selected cell backgrounds and Armands L.'s answer did not work consistently for me (selecting cells by 'user-tap' did work, but programmatical cell selection showed strange results (like sometimes the selected background was not visible, or did not fill the cell's height properly...).
I found a custom solution that worked:
- Subclass
UITableViewCell
- Initialize
self.selectedBackgroundView
ininit
and - Add custom
UIColor
property withUI_APPEARANCE_SELECTOR
for custom selected background color
.h
file:
@property (nonatomic) UIColor* selectedCellBackgroundColor UI_APPEARANCE_SELECTOR;
.m
file:
in init
method(s):
self.selectedBackgroundView = [[UIView alloc] init];
and last but not least the setter function for the color:
- (void) setSelectedCellBackgroundColor:(UIColor*) color {
_selectedCellBackgroundColor = color;
self.selectedBackgroundView.backgroundColor = color;
}
You can't do this direct to UITableViewCell, but you can do it for its contentView
:
[[UIView appearanceWhenContainedIn:[UITableViewCell class], nil] setBackgroundColor:[UIColor redColor]];
Note that it will change all the subViews bg color.
Another option is writing a category or subclass the UITableViewCell
with UI_APPEARANCE_SELECTOR
mark, check this question:
iOS: Using UIAppearance to define custom UITableViewCell color

- 1
- 1

- 18,422
- 7
- 59
- 68
-
1This appears to change all cell background, regardless of selected state or not. – bugfixr Oct 17 '14 at 14:34
-
1This looks nice, but can you use `UIAppearance` for only the **selected** state of a `UITableViewCell`? – Clifton Labrum Jun 23 '15 at 20:08
-
@CliftonLabrum I added an answer below that might answer your question. – anneblue Aug 26 '15 at 09:55