Cocoa-Touch: Как: пользовательский UITableViewCell с UIColor clearColor background - PullRequest
1 голос
/ 25 октября 2009

У меня есть UITableView с пользовательскими ячейками.
У меня есть MyTableViewCell : UITableViewCell и MyTableViewCellContentView : UIView классы.

В основном я делаю то, что делается в демонстрационном приложении AdvancedTableViewCells от Apple с небольшим изменением, в некоторых строках я хочу использовать фон clearColor для отображения фона таблицы за закрашенным текстом .

Так что в MyTableView cellForRowAtIndexPath я делаю:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"MyCell";

    MyTableViewCell *cell = (MyTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[MyTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }

    cell.someValue = indexPath.section;
    [cell finishedSetup];

    return cell;
}

А в моих MyTableViewCell х finishedSetup:

cellContentView = [[MyTableViewCellContentView alloc] initWithFrame:CGRectMake(0, 0, 320, 80) cell:self];
cellContentView.autoresizingMask = UIViewAutoresizingNone;
cellContentView.contentMode = UIViewContentModeRedraw;
[self.contentView addSubview:cellContentView];

И в MyTableViewCellContentView Я реализую метод drawRect. И не планируйте использовать какие-либо подпредставления, а нарисуйте мой пользовательский контент, как это делает пример Apple в CompositeSubviewBasedApplication.

Проблема в том, что для нескольких разделов я хочу использовать clearColor backgroundColor. Это работает до тех пор, пока ячейка с не-clearColor backgroundColor не будет повторно использована для рисования ячейки clearColor, когда фон не будет очищен и по-прежнему будет иметь старый цвет.

Как сделать перерисовку фона?

Редактировать : Я забыл упомянуть, я устанавливаю цвет фона в инициализации MyTableViewCellContentView после вызова супер инициализации. Установка через:

self.backgroundColor = [UIColor clearColor];

Я проверил, что это действительно вызывается и вызывается, как и ожидалось, с clearColor или redColor.

Я также пытался установить цвет фона ячейки таблицы, это не помогло.

Edit # 2 : Вот мой метод drawRect:

- (void)drawRect:(CGRect)rect {
    [super drawRect:rect];
    static int i = 0;
    [[NSString stringWithFormat:@"Cell %d", ++i] drawAtPoint:CGPointMake(3, 3) withFont:[UIFont boldSystemFontOfSize:16]];
}

Ответы [ 2 ]

1 голос
/ 26 октября 2009

Чтобы настройки цвета фона вступили в силу, вам нужно выполнить настройку в tableView:willDisplayCell:forRowAtIndexPath - ОС не изменит ничего, что вы здесь установили. Причина в том, что некоторые дополнительные настройки ячейки выполняются ОС после того, как вы вернете ее из tableView:cellForRowAtIndexPath. Если вы можете, посмотрите на сессию 101 из WWDC 09, представленной Джейсоном Бивером.

0 голосов
/ 28 октября 2009

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

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

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