UITableViewCell теряет повторяющийся контент в другой ячейке - PullRequest
0 голосов
/ 09 ноября 2011

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

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

    CollectionCell *cell = (CollectionCell *)[tableView 
                         dequeueReusableCellWithIdentifier:MyIdentifier];
    if (!cell) {
        cell = [[[CollectionCell alloc] initWithStyle:UITableViewCellStyleSubtitle 
                                  reuseIdentifier:MyIdentifier] 
                autorelease];
    }

    [cell setCollectionView:/* Generated view in other class */];  

    return cell;
}

Конкретная проблема:

Мое динамическое представление состоит, например, из 2 UILabels:

  • если метка 1 является заголовком, заголовок уникален для каждой строки -> Нет проблем, отрисовывается нормально.
  • , если метка 2 является категорией, индексы от 0 до 5 имеют одинаковую категорию-> Только строка в индексе 5 показывает метку категории.

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

Спасибо заваше время и помощь.

ОБНОВЛЕНИЕ:

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

Я собираюсь объяснить это подробно:

Элементы управления контентом и пользовательским интерфейсом, добавленные в свойство collectionView, могут различаться при каждом выполнении.В одном исполнении collectionView может иметь UIImageView и UILabel, а в следующем исполнении - 2 UILabel (например).Вот почему я не могу создать что-то подобное

    if (!cell) {
        cell = [[[CollectionCell alloc] initWithStyle:UITableViewCellStyleSubtitle 
                                  reuseIdentifier:MyIdentifier] 
                autorelease];

        UILabel *foo = [[UILabel alloc] initWithFrame:SomeFrame];
        [foo setTag:101];
        [cell.collectionView addSubview:foo];
    }

    UILabel *foo = [cell.collectionView subviewWithTag:101];
    [foo setTitle:@"This content is dynamic"];

Спасибо!

Обновление 2:

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

1 Ответ

0 голосов
/ 09 ноября 2011

Вы не должны добавлять подпредставления вне блока-

if (!cell) {
        cell = [[[CollectionCell alloc] initWithStyle:UITableViewCellStyleSubtitle 
                                  reuseIdentifier:MyIdentifier] 
                autorelease];
}

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

все, что происходит вне (после) этого блока «если», происходит несколько раз, когда вы прокручиваете свою таблицу вверх и вниз, так что именно там вы редактируете добавленные подпредставления (только после целого блока «если», вне его).

Смотрите мой ответ здесь

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