Измените выбранный цвет фона ячейки с помощью UIAppearance

Мне нужно изменить выбранный цвет фона ячейки для всех ячеек в моем приложении. Как я знаю, есть способ использовать протокол UIAppearance для этих целей. Можно ли это реализовать по категории для UITableViewCell?

Ответ 1

Вы не можете сделать это прямо в UITableViewCell, но вы можете сделать это для своего contentView:

[[UIView appearanceWhenContainedIn:[UITableViewCell class], nil] setBackgroundColor:[UIColor redColor]];

Обратите внимание, что он изменит весь цвет подэлементов bg.

Другой вариант заключается в написании категории или подкласса UITableViewCell с меткой UI_APPEARANCE_SELECTOR, проверьте этот вопрос:

iOS: использование UIAppearance для определения пользовательского цвета UITableViewCell

Ответ 2

Используя внешний прокси-сервер, вы можете покрасить все ячейки. Не знаю, можете ли вы настроить таргетинг на определенную категорию.

Чтобы сделать раскраску, введите следующий код в файл AppDelegate.m:

Положите [self customCellBackground]; в - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions

и где-то в конце:

- (void)customCellBackground {
UIView *cellBackgroundView =[[UIView alloc] init];
cellBackgroundView.backgroundColor = [UIColor blackColor];
[[UITableViewCell appearance] setSelectedBackgroundView:cellBackgroundView];}

Ответ 3

Как null ответ не для выбранных фонов и Armands L. answer не работал последовательно для меня (выбор ячеек по "user-tap" действительно работал, но выбор программных ячеек показывал странные результаты (например, иногда выбранный фон не был виден или не заполнялся высота ячейки правильно...).

Я нашел собственное решение, которое сработало:

  • Подкласс UITableViewCell
  • Инициализировать self.selectedBackgroundView в init и
  • Добавить пользовательское свойство UIColor с UI_APPEARANCE_SELECTOR для пользовательского выбранного цвета фона

.h файл:

@property (nonatomic) UIColor* selectedCellBackgroundColor UI_APPEARANCE_SELECTOR;

.m файл:

в init методе (-ях):

self.selectedBackgroundView = [[UIView alloc] init];

и последнее, но не менее важное значение для функции setter для цвета:

- (void) setSelectedCellBackgroundColor:(UIColor*) color {
    _selectedCellBackgroundColor = color;
    self.selectedBackgroundView.backgroundColor = color;
}