Установка альфа-подпредставления подкласса IUTableViewCell - PullRequest
0 голосов
/ 05 февраля 2012

У меня есть подкласс UITableViewCell. Я пытаюсь настроить альфу whiteLine подпредставления, но альфа вступает в силу только после прокрутки к ячейке за пределами экрана. Начальная партия whiteLine показа подпредставлений с альфа-значением 1,0.

Вот как я настраиваю ячейку таблицы:

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

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

    // Configure the cell...
    [cell rowIsOdd:(indexPath.row%2 ? NO : YES)];

    return cell;
}

А вот как я настраиваю whiteLine и изменяю его альфа в подклассе ячейки таблицы:

- (void)drawRect:(CGRect)rect
{
    self.whiteLine = [[UIView alloc] initWithFrame:CGRectMake(0.0, self.frame.size.height-1.0, self.frame.size.width, 1.0)];
    self.whiteLine.backgroundColor = [UIColor whiteColor];
    [self addSubview:self.whiteLine];
}

- (void)rowIsOdd:(BOOL)isOdd
{
    self.whiteLine.alpha = (isOdd ? 0.7 : 0.3);
}

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

Ответы [ 2 ]

0 голосов
/ 05 февраля 2012

Возможно, вы хотите переместить инициализацию подпредставления whiteLine в initWithStyle:reusedIdentifier: В настоящее время вы настраиваете альфа-версию до ее создания. Кроме того, вы создаете новое представление каждый раз, когда вызывается drawRect: это тоже однозначно нет.

Я сейчас не в компиляторе, но что-то вроде этого должно решить вашу проблему:

Обратите внимание, что я также добавил вызов autorelease в ваше подпредставление whiteLine (я предполагаю, что это сохраняемое свойство). Вы можете рассмотреть возможность использования ARC, если вы не знакомы с Cocoa Memory Management. В противном случае я предлагаю перечитать Руководство по управлению памятью Apple и, возможно, превосходное Руководство по стилю кода Google Objective-C

В BaseCell.m:

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)identifier {
    self = [super initWithStyle:style reuseIdentifier:identifier];
    if (self) {
        self.whiteLine = [[[UIView alloc] initWithFrame:CGRectMake(0.0,  self.frame.size.height-1.0, self.frame.size.width, 1.0)] autorelease];
        self.whiteLine.backgroundColor = [UIColor whiteColor];
        [self addSubview:self.whiteLine];
    }
    return self;
}

- (void)dealloc {
    self.whiteLine = nil;
    [super dealloc];
}

- (void)rowIsOdd:(BOOL)isOdd
{
    self.whiteLine.alpha = (isOdd ? 0.7 : 0.3);
}
0 голосов
/ 05 февраля 2012

Я понял это. Мне нужно было настроить представление в awakeFromNib вместо drawRect.

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