Повторные ячейки в табличном представлении - PullRequest
1 голос
/ 16 февраля 2011


это мой cellForRowAtIndexPath.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Maledetta"];
if (cell == nil) {
    UIViewController *c;
    if (!IS_IPAD) c = [[UIViewController alloc] initWithNibName:@"NewsRow" bundle:nil];
    else c = [[UIViewController alloc] initWithNibName:@"NewsRow_ipad" bundle:nil];
    cell = (NewsRowController*)c.view;

    if ([titleArray count] > 0) {
        [(NewsRowController*)cell setCellDataWithName:[titleArray objectAtIndex:indexPath.row]  
                                              andDate:[descArray objectAtIndex:indexPath.row] 
                                                  day:[dayArray objectAtIndex:indexPath.row]
                                                month:[monthArray objectAtIndex:indexPath.row]];
    }
    [c release];
}
return cell;
}

Почему он показывает мне только 4 строки, и после этого повторите первый раз для четвертого раза до десяти ???

+-----------------------+
| A
+-----------------------+
| B
+-----------------------+
| C
+-----------------------+
| D
+-----------------------+
| A (repeated)
+-----------------------+
| B (repeated)
+-----------------------+
| C (repeated)
+-----------------------+
| D (repeated)
+-----------------------+
| A (repeated)
+-----------------------+
| B (repeated)
+-----------------------+

Ах, [titleArray count] равно 10. kCustomCellID правильно.

спасибо.
A

Ответы [ 2 ]

5 голосов
/ 16 февраля 2011

Вы заполняете ячейку, только если она не найдена в очереди ячеек таблицы. Если он найден, вы не перезаписываете его содержимым для этого значения indexPath.row.

Попробуйте вместо этого:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Maledetta"];
if (cell == nil) {
    UIViewController *c;
    if (!IS_IPAD) c = [[UIViewController alloc] initWithNibName:@"NewsRow" bundle:nil];
    else c = [[UIViewController alloc] initWithNibName:@"NewsRow_ipad" bundle:nil];
    cell = (NewsRowController*)c.view;
    [c release];

 }

 if ([titleArray count] > 0) {
        [(NewsRowController*)cell setCellDataWithName:[titleArray objectAtIndex:indexPath.row]  
                                              andDate:[descArray objectAtIndex:indexPath.row] 
                                                  day:[dayArray objectAtIndex:indexPath.row]
                                                month:[monthArray objectAtIndex:indexPath.row]];
  }
  return cell;
}

Кроме того, проверка [titleArray count], вероятно, избыточна. Вы используете это, чтобы указать количество ячеек в разделе для этой таблицы, верно? Если это ноль, это даже не доберется сюда.

0 голосов
/ 16 февраля 2011

Когда вы вызываете [tableView dequeueReusableCellWithIdentifier:@"Maledetta"], табличное представление ищет ячейки в своем кэше, которые больше не отображаются на экране. Он находит ваши клетки и использует их вместо этого. Реализуйте -prepareForReuse в своих ячейках, затем добавьте предложение else в вашей реализации -cellForRowAtIndexPath: для обработки повторно используемых ячеек.

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