UILabel backgroundColor в UITableViewCell всегда возвращается к начальному значению - PullRequest
3 голосов
/ 05 октября 2010

В моем приложении у меня есть UITableViewCell, который используется для отображения настройки цвета фона. В detailTextLabel он отображает название цвета с фоном, установленным на фактический цвет, например [UIColor cyanColor]. Обратите внимание, что я устанавливаю фон только для detailTextLabel, а не для всего UITableViewCell. Когда пользователи нажимают на ячейку, они переходят в другой UITableView, который позволяет им выбрать цвет, а когда они возвращаются к предыдущему UITableView, backgroundColor UILabel обновляется до нового цвета.

Проблема в том, что всякий раз, когда я возвращаюсь к исходному UITableView, backgroundColor UILabel мгновенно обновляется, а затем возвращается к исходному цвету. Я не могу понять, почему это будет возвращаться. Есть предложения?

Спасибо!

Ответы [ 4 ]

7 голосов
/ 05 октября 2010

Некоторые свойства на основе состояния устанавливаются табличным представлением; Я считаю, что цвет фона является одним из них. Другими словами, табличное представление меняет цвет фона detailTextLabel, вероятно, как часть невыделенного выделения.

После того, как табличное представление устанавливает свойства на основе состояния, делегату таблицы предоставляется последний шанс обновить внешний вид каждой ячейки. Это делается в методе делегата tableView:willDisplayCell:forRowAtIndexPath:. Возможно, если вы установите в этом методе цвет фона detailTextLabel, ваша проблема исчезнет.

0 голосов
/ 07 марта 2014

Я исправил это, создав подкласс UILabel HighlightedLabel со следующим инициализатором:

- (id)initWithHighlightedBackgroundColor:(UIColor *)highlightedBackgroundColor nonHiglightedBackgroundColor:(UIColor *)nonHighlightedBackgroundColor
    {
        self = [super init];
        if(self)
        {
            _highlightedBackgroundColor = highlightedBackgroundColor;
            _nonHighlightedBackgroundColor = nonHighlightedBackgroundColor;
            self.backgroundColor = nonHighlightedBackgroundColor;
        }
        return self;
    }


    -(void)setHighlighted:(BOOL)highlighted
    {
        if(highlighted)
        {
            self.backgroundColor = self.highlightedBackgroundColor;
        }
        else
        {
            self.backgroundColor = self.nonHighlightedBackgroundColor;
        }
    }

Затем, когда я выделяю эту ячейку, я указываю выделенный и невыделенный цвет фона.

Это прекрасно работает - когда я выбираю ячейку, цвет - это то, что я хочу.

0 голосов
/ 25 октября 2010

Да. Возможно, вы не используете ячейки повторно в методе cellForRowAtIndexPath.Если это так, попробуйте повторно использовать ваши клетки, а не создавать новые каждый раз.

0 голосов
/ 05 октября 2010

Когда выполняется cellForRowAtIndexPath, он обычно создает и возвращает новую ячейку.

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

...