Изменение цвета фона для cell.accessoryView и cell.editingAccessoryView - PullRequest
24 голосов
/ 14 августа 2010

Всякий раз, когда я добавляю accessoryView к своему UITableViewCell, он не передает цвет фона? Я устанавливаю UISwitch в качестве моего accessoryView, а цвет, который я установил в свойстве cell.backgroundColor, влияет только на contentView, а не accessoryView. Я перепробовал все, чтобы установить для них одинаковое значение. Я попытался установить свойства cell.backgroundView.backgroundColor и cell.accessoryView.backgroundColor на нужный мне цвет, но ничего не работает. Я также попытался создать подпредставление внутри contentView, что решило проблему backgroundColor (избегая ее), но оно создает проблему, когда переключатель располагается поверх cell.textLabel, когда текст слишком длинный.

Есть ли способ, которым я могу изменить цвет фона accessoryView, не создавая подвид в contentView, или изменить длину cell.textLabel, не создав подкласс UITableViewCell?

Ответы [ 5 ]

54 голосов
/ 14 августа 2010

После прочтения документации (новая идея) я обнаружил статью " Пристальный взгляд на ячейки табличного представления ". Это помогло мне понять состав клеток, и я нашел свой ответ ...

клетки выглядят так ...

alt text

Поскольку cell.accessoryView является дочерним представлением для cell.contentView, мне пришлось запросить у cell.contentView его суперпредставление, а затем я смог изменить цвет фона для обоих представлений одновременно. Вот как выглядит код ...

// Cell Formatting
cell.contentView.superview.backgroundColor = [UIColor greenColor];

Я знаю, что это действительно просто, но я новичок, и мне потребовались целые годы, чтобы притормозить и прочитать документ. Надеюсь, это поможет другим людям!

44 голосов
/ 07 мая 2011
- (void) tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    cell.backgroundColor = [UIColor yellowColor];
}
15 голосов
/ 30 сентября 2011
 UIView *myView = [[UIView alloc] initWithFrame:cell.frame];
 myView.backgroundColor = [UIColor colorWithRed:214.00/255.00 green:233.00/255.00 blue:247.00/255.00 alpha:1.0];
 cell.backgroundView = myView;
 [myView release];
1 голос
/ 27 марта 2015

Если вы хотите смешать цвет фона вспомогательного представления с цветом фона ячейки, в iOS8 и Swift это сработало как прелесть в методе tableView (_, cellForRowAtIndexPath :):

let color = cell.contentView.backgroundColor
cell.backgroundColor = color
1 голос
/ 04 марта 2011

@ Зак, прежде всего спасибо за то, что привлекли мое внимание к деталям расположения ячеек.Очень полезно!
Я просто хотел бы отметить, что следующий код:

self.backgroundColor = [UIColor colorWithPatternImage: [UIImage imageNamed:@"cell_background.png"]];

работал для меня.В результате фоновое изображение растянулось на всю клетку. AccessoryTypeView не охватывал это!Важной частью является помещение этого кода в метод layoutSubviews вашего пользовательского класса ячейки, а не в cellForRowAtIndexPath , найденный в классе TableViewController.В моем случае я определил класс CustomCell и внутри него я определил метки, изображения и т. Д.

ПРИМЕЧАНИЕ. Следующий код не работал:

cell.contentView.backgroundColor = [UIColor colorWithPatternImage: [UIImage imageNamed:@"cell_background.png"]];

при помещении внутрь tableView: (UITableView *) tableView cellForRowAtIndexPat метод.Он давал мне фон, покрывающий ячейку, но AccessoryTypeView находился над ней ...

...