iPhone - Как использовать ABTableViewCell? - PullRequest
2 голосов
/ 21 июня 2010

Я работаю над UITableView, чьи ячейки содержат подкласс UIImageView, который получает данные с URL-адреса и кэширует изображения на диск iphone.

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

Но даже с предоставленным примером (blog.atebits.com/2008/12/fast-scrolling-in-tweetie-with-uitableview) я не совсем понимаю, что должен делать.

Я попытался сделать это: я создал класс, который наследует ABTableViewCell, добавил некоторые UILabels и UIImageView в качестве свойств класса, и реализовал методы таким образом: выделять и инициализировать подпредставления (метки, изображения) в классе initialize метод, сохраняя их в статических указателях, а затем задайте свойства класса в - (void)drawContentView:(CGRect)r highlighted:(BOOL)highlighted вместе с настройкой цвета фона, показанной в примере. Вот результат:

static AsyncUIImageView* image = nil; // A subclass using ASIHTTPRequest for image loading
static UILabel*       label1 = nil;
static UILabel*       label2 = nil;

+ (void)initialize {
    if (self == [ResultTableViewCell class]) {
        image = [[[AsyncUIImageView alloc] initWithFrame:CGRectMake(0, 0, 80, 60)] retain];

        label1 = [[[UILabel alloc] initWithFrame:CGRectMake(90, 5, 150, 30)] retain];
        label1.font = [UIFont fontWithName:@"Helvetica-Bold" size:17];
        label1.textColor = [UIColor purpleColor];
        label1.backgroundColor = [UIColor clearColor];

        label2 = [[[UILabel alloc] initWithFrame:CGRectMake(180, 8, 100, 25)] retain];
        label2.font = [UIFont fontWithName:@"Helvetica-Bold" size:12.0];
        label2.textColor = [UIColor grayColor];
        label2.backgroundColor = [UIColor clearColor];
    }
}

- (void)drawContentView:(CGRect)r highlighted:(BOOL)highlighted {
    if (self.imageView == nil) {
        self.imageView = image;
        [self addSubview:image];

        self.firstLabel = label1;
        [self addSubview:label1];

        self.secondLabel = label2;
        [self addSubview:label2];
    }

CGContextRef context = UIGraphicsGetCurrentContext();

    UIColor *backgroundColor = [UIColor whiteColor];
    UIColor *textColor = [UIColor blackColor];

    if (self.selected || self.highlighted) {
        backgroundColor = [UIColor clearColor];
        textColor = [UIColor whiteColor];
    }

    [backgroundColor set];
    [textColor set];
    CGContextFillRect(context, r);      
}

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

Может ли кто-нибудь объяснить его цель?

1 Ответ

1 голос
/ 21 июня 2010

Вся идея состоит в том, чтобы не добавлять подпредставления, а вместо этого рисовать текст. Например.

- (void)drawContentView:(CGRect)r highlighted:(BOOL)highlighted {

    [someText drawInRect:r withFont:aFont];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...