Мой UITableView имеет дублированные строки - PullRequest
0 голосов
/ 08 июня 2010

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

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

Вам нужно «очистить» ячейки, находящиеся в очереди, чтобы новые ячейки не использовали уже созданные ячейки?

мой код как ниже:

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

    MyDayCell *cell = (MyDayCell *)[tableView 
                                      dequeueReusableCellWithIdentifier: CustomCellIdentifier];

    if (cell == nil) { 
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"MyDayCell" owner:self options:nil];

        for (id oneObject in nib) 
            if ([oneObject isKindOfClass:[MyDayCell class]])
                cell = (MyDayCell *)oneObject;

    } 

    NSUInteger section = [indexPath section];
    NSUInteger row = [indexPath row]; 
    NSArray *thisSectionItems = (NSArray*)[self.listData objectForKey: [[NSNumber alloc] initWithInt:section]];
    MyDayDetails *rowData = [thisSectionItems objectAtIndex:row]; 

    //setup my cells data here...

    return cell;
}

Что-то не так с этим кодом?

кто-нибудь видел что-нибудь подобное раньше?

Ответы [ 2 ]

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

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

Ваша проблема на самом деле в коде, который вы не включили.

//setup my cells data here...

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

Например:

cell.textLabel.text = str ? str : @"";

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

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

0 голосов
/ 08 июня 2010

Я думаю, что я решил это, мне просто нужно добавить оператор else в блок if (cell == nil), который очищает заполненные ячейки значения?

Это правильный способ сделать это?

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