initWithFrame против initWithStyle - PullRequest
       6

initWithFrame против initWithStyle

4 голосов
/ 21 февраля 2012

Я хочу обновить свой TableView из устаревших initWithFrame:reuseIdentifier:.

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

Везде, где говорится, используется initWithStyle:, и что это никак не меняет поведение или ячейку с initWithFrame:CGRectZero reuseIdentifier:.

Но когда я строю с initWithStyle:UITableViewCellStyleDefault reuseIdentifier:, ячейки становятся пустыми (т. Е. Наша настраиваемая ячейка не работает (потому что она инициализируется каким-то стилем?)).

После того, как ячейка была инициализирована (если она не вышла из очереди), мы устанавливаем тексты в ячейку. Но они не установлены, когда я использую initWithStyle:reuseIdentifier:, но он работает с initWithFrame:CGRectZero. Ни один из кодов не изменяется, за исключением используемого метода init (initWithStyle).

Эти строки вставляются после создания (или повторного использования) ячейки:

cell.newsItemNameLabel.text = @"test";
NSLog(@"NewsItemName: %@",cell.newsItemNameLabel.text);

Результаты в "NewsItemName: (null)"

У кого-нибудь есть идея? В чем реальная разница между ними?

Спасибо

1 Ответ

3 голосов
/ 21 февраля 2012

Ваша реализация cellForRowAtIndexPath должна выглядеть примерно так:

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

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

    // Configure the cell.
    cell.textLabel.text = NSLocalizedString(@"Detail", @"Detail");
    return cell;
}

где CustomCell - это имя класса вашей пользовательской ячейки. Обратите внимание, что эта реализация использует ARC (автоматический подсчет ссылок). Если вы не используете эту функцию, добавьте вызов autorelease к выделению вашей ячейки.

CustomCell s initWithStyle реализация:

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        //do things
    }
    return self;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...