выбранный цвет фона UITableViewCell изменяется при прокрутке - PullRequest
3 голосов
/ 24 февраля 2012

У меня есть эти ячейки, для которых я установил собственный цвет фона. Цвет фона прекрасно работает, когда я выбираю ячейку, однако при прокрутке вниз и назад возможны две вещи:

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

  2. Если выбрана большая часть или все ячейки, вышедшие ячейки возвращаются с одним из цветов, которые были на ячейках, которые были там ранее - т.е. Я выбираю все ячейки, прокручиваю вниз и назад, и ячейки вверху имеют тот же цвет, что и ячейки внизу (или, по крайней мере, некоторые из них - другие сохраняют свой собственный цвет).

Вот код, который у меня есть, который производит это:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    UITableViewCell *row = [tableView cellForRowAtIndexPath:indexPath];
    UIView *backview = [[UIView alloc] initWithFrame:row.frame];
    backview.backgroundColor = [colours objectAtIndex:indexPath.row];
    row.selectedBackgroundView = backview;
}

Вот где выбранный метод для ячеек меняет цвет. Клетки создаются здесь:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"eventTypeID";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }
    NSString *sEventType = [[self.eventTypes valueForKeyPath:@"name.text"] objectAtIndex:indexPath.row];
    cell.textLabel.text = sEventType;
    return cell;
}

И цвета для каждой ячейки установлены здесь:

- (void)loadView {
    colours = [[NSMutableArray alloc] init];
    CGFloat red[] = {0.84,0.86,0.7,0.46,0.56,0.44,0.95,0.91,0.91,0.76,0.06,0.8,0.73,0.0,0.0,0.01,0.18,0.23,0.57,0.18};
    CGFloat green[] = {0.12,0.01,0.07,0.17,0.32,0.18,0.49,0.49,0.78,0.61,0.48,0.85,0.85,0.28,0.38,0.53,0.23,0.36,0.32,0.24};
    CGFloat blue[] = {0.34,0.5,0.2,0.53,0.55,0.31,0.18,0.18,0.12,0.27,0.14,0.1,0.49,0.1,0.37,0.49,0.4,0.41,0.55,0.40};
    for (int i = 0; i < 20; i++) {
        [colours addObject: [UIColor colorWithRed:red[i] green:green[i] blue:blue[i] alpha:1.0]];
    }
//Get data from server and parse it
...
}

Теперь я только начал программировать iPhone, но я предполагаю (и это, кстати, дикий случай), что клетки восстанавливаются в cellForRowAtIndexPath, и хотя некоторые свойства сохраняются (например, название ...) пользовательский фон не является.

Кто-нибудь сталкивался с таким поведением раньше? Если да, то как ты решил это?

РЕДАКТИРОВАТЬ: Даже более странное поведение: Иногда, если вы прокручиваете назад вниз и вверх, ячейка, которая перешла на выбранный «по умолчанию» цвет фона, возвращается к своей пользовательской. Поведение кажется случайным.

1 Ответ

7 голосов
/ 24 февраля 2012

Цвета фона ячейки установлены во многих местах, чтобы обеспечить использование нужного фона:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath

. Для получения дополнительной информации см. этот вопросЕсли вам требуются пользовательские цвета выбора, то вы должны создать подкласс UITableViewCell и переопределить - (void)setSelected:(BOOL)selected и - (void)setHighlighted:(BOOL)highlighted

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...