Проблема внешнего вида ячейки TableView - PullRequest
0 голосов
/ 29 января 2012

У меня есть таблица VIew, где каждая клетка имеет высоту 90.0f (высота).мой код;

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return 90.0;
}

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

1.) Моя проблема в том, что мне нужно, чтобы высота ячейки оставалась равной 90.0f даже после того, как пользователь удалит все записи.Как я могу сделать это программно?

2.) Я дал 2 цвета для своей камеры.

cell.contentView.backgroundColor = indexPath.row % 2 ? [UIColor whiteColor] : [UIColor blackColor] ;

Когда я удаляю вторую ячейку, которая черная, то и 1-я, и 3-я ячейки белые.Как я могу перестроить это, чтобы оно было черно-белым в порядке.

РЕДАКТИРОВАТЬ:

Хорошо, это работает, но когда я пытаюсь удалить последнюю запись втаблица и [tableview indexPathsForVisibleRows] я получаю ошибку подтверждения в

-[UITableView _endCellAnimationsWithContext:], /SourceCache/UIKit_Sim/UIKit-1448.89/UITableView.m:961 и

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid update: invalid number of rows in section 0. Attempt to delete more rows than exist in section.'

Почему это так?

КОД:

[self.tableView beginUpdates];

        [self.myArray removeObjectsInArray:discardedItems ]; 

        [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath, nil]  withRowAnimation:YES];     

[self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath, nil]  withRowAnimation:YES];  

        [self.tableView endUpdates];

Ответы [ 3 ]

1 голос
/ 29 января 2012

Если высота ваших строк действительно статична (как вы показали), рассмотрите возможность не реализовать tableView:heightForRowAtIndexPath:, а вместо этого использовать свойство rowHeight табличного представления.
Это можно установить либо в коде, либо в интерфейсеПостроитель и должен быть решением вашей «проблемы сокращения строк, если их нет».

К вашей второй проблеме:
Знаете ли вы о -[UITableView indexPathsForVisibleRows]?

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

- tableView:(UITableView *)table commitEditingStyle:(UITableViewCellEditingStyle)style forRowAtIndexPath:(NSIndexPath *)path
{
   NSArray *visibleCellPaths = [table indexPathsForVisibleRows];

   // replace this comment with whatever else needs to be done in any case...

   if (style == UITableViewCellEditingStyleDelete) {
      // replace this comment with the deletions of the model object

      NSUInteger affectedPathIndex = [visibleCellPaths indexOfObject:path];
      NSMakeRange updateRange = NSMakeRange(affectedPathIndex, [visibleCellPaths count] - affectedPathIndex);
      NSArray *cellPathsToReload = [visibleCellPaths subarrayWithRange:updateRange];

      // replace this comment with the bounds-checking.
      // e.g. if you only had one section and the backing store was an array, it may look like this:
      // while ([self.backingStore count] <= [[cellPathsToReload lastObject] row]) {
      //    NSUInteger remainingPathCount = [cellPathsToReload count];
      //    if (remainingPathCount) break;
      //    cellPathsToReload = [cellPathsToReload subarrayWithRange:NSMakeRange(0, remainingPathCount - 1)];
      // }

      [table reloadRowsAtIndexPaths:cellPathsToReload withRowAnimation:UITableViewRowAnimationFade];
   }

}
1 голос
/ 29 января 2012

1) Я не думаю, что вы можете сделать это.Одним из способов было бы показать x пустых ячеек для заполнения страницы.

2) Вызвать [tableView reloadData] после удаления ячейки или вызвать [tableView reloadCellAtIndex ...] в строках до и послеудаленная ячейка.

0 голосов
/ 30 января 2012
  1. установить rowHeight свойство UITableView.

Состояния документации:

Высота каждой строки (ячейки таблицы) в получателе.

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