Методы UITableViewDelegate - PullRequest
       21

Методы UITableViewDelegate

0 голосов
/ 13 декабря 2010

Вот проект xcode, который я только что задал, чтобы задать этот вопрос:

http://www.mediafire.com/?z26ufsfhby62br9

Откройте журнал и запустите его.Вы обнаружите, что он выводит display: x и create: x, где x - это число от 0 до 49 и соответствует ячейке с тем же номером.Он должен выводить только до 22, прежде чем выполнять прокрутку, поскольку Apple всегда хвастается, что их таблицы загружаются по мере необходимости.

В основном это показывает, что tableView:willDisplayCell:forRowAtIndexPath: и tableView:cellForRowAtIndexPath: запускаются для каждой ячейки в значительной степени, как только появляется табличное представление, почему это так?

- (UITableViewCell *)tableView:(UITableView *)tableView 
         cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    NSLog(@"create: %i", indexPath.row);
    static NSString *CellIdentifier = @"Cell";

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

    // Configure the cell...
    cell.textLabel.text = [NSString stringWithFormat:@"%i", indexPath.row];
    return cell;
}

- (void) tableView:(UITableView *)tableView 
   willDisplayCell:(UITableViewCell *)cell 
 forRowAtIndexPath:(NSIndexPath *)indexPath {
    NSLog(@"display: %i", indexPath.row);   
}

Почему названные выше методы называютсясразу после загрузки tableView (и перед каждой ячейкой)?Наверняка их следует вызывать только перед тем, как появится каждая ячейка?

Ответы [ 2 ]

1 голос
/ 13 декабря 2010

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

Вы используете willDisplayCell:forRowAtIndexPath: для настройки таких вещей, как шрифт и цвет текста. В более новой версии iPhone с определенными конфигурациями таблиц, если вы настраиваете такие вещи, как цвет текста метки в методе tableView:cellForRowAtIndexPath:, ваши изменения будут потеряны в какой-то момент до того, как ячейка действительно отобразится. Здесь вы можете выполнять такие действия, как изменение цвета метки, регулировка подсветки фона и тому подобное.

0 голосов
/ 13 декабря 2010

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

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