Вопрос

NSIndexPath* updatedPath = [NSIndexPath indexPathForRow: 0 inSection: 0]; 
NSIndexPath* updatedPath2 = [NSIndexPath indexPathForRow: 1 inSection: 0]; 
NSArray* updatedPaths = [NSArray arrayWithObjects:updatedPath, updatedPath2, nil]; 
[self.mySexyTableView reloadRowsAtIndexPaths:updatedPaths withRowAnimation:UITableViewRowAnimationTop];

Приведенный выше код работает, и он анимируется.Проблема в том, что у меня много данных, и я не хочу жестко кодировать индексы строк.Поскольку у меня есть только один раздел в моей таблице, раздел может быть равен 0.Как я могу динамически генерировать NSArray объектов NSIndexPath?

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

Это было полезно?

Решение

Чтобы сгенерировать массив путей к индексам, вы могли бы просто выполнить цикл:

    NSMutableArray *updatedPaths = [NSMutableArray array];
    for (NSNumber *row in someArray) {
        NSIndexPath *updatedPath = [NSIndexPath indexPathForRow:[row intValue] inSection:0];
        [updatedPaths addObject:updatedPath];
    }
    [self.mySexyTableView reloadRowsAtIndexPaths:updatedPaths withRowAnimation:UITableViewRowAnimationTop];

Если вы перезагружаете все данные в свой TableView, почему бы просто не вызвать метод reloadData?

Другие советы

Если вы хотите обновить весь раздел целиком:

[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationTop];

Если у вас есть более одного indexPathForRow с равным индексом строки, вы получите это исключение.

Для примера

[segmentTable reloadRowsAtIndexPaths: [[NSArray alloc] initWithObjects: 
                                [NSIndexPath indexPathForRow: 1 inSection: 1], 
                                [NSIndexPath indexPathForRow: 1 inSection: 1], nil]                                 withRowAnimation:UITableViewRowAnimationNone];

Наконец-то у меня это заработало.Вот этот код:

NSMutableArray *indexPaths = [[[NSMutableArray alloc] init] autorelease];
for (int i = 0; i < [mySexyList count]; i++) {
   NSIndexPath *updatedPath = [NSIndexPath indexPathForRow:i inSection:0];
   [indexPaths addObject:updatedPath];
}

[self.myFunkyTableView reloadRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationTop];

Проблема заключалась в том, что я возвращал жестко закодированное значение из numberOfRowsInSection:метод, который не совпадал с размером mySexyList.Это приводило к сбою приложения.

Предполагать self.arTableData представляет собой изменяемый массив таблиц & tableView является примером UITableView.Предположим , что имеется 10 строк ( что означает 10 объектов в массиве ) в tableView.Я действительно реализую следующий код для удаления анимированных строк.

int i; // to remove from 3 to 6
for(i=2;i<6;i++)
{
    [self.arTableData removeObjectAtIndex:i];
    [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:i inSection:0]] withRowAnimation:UITableViewRowAnimationRight];
}

Этот трюк работает у меня без каких-либо проблем.Надеюсь, у вас это сработает так же.Желаю удачи.

Просто чтобы добавить свое решение в общую смесь, поскольку оно было простым, как только я его нашел.Что происходило, так это то, что у меня есть таблица, которая "сгруппирована" по моему собственному коду с использованием той же техники, что и в: cocoanetics.com

Когда пользователь делает что-то, требующее обновления ячейки, а таблица в то время не была сгруппирована, мой код пытался использовать

[[self tableView] reloadRowsAtIndexPaths:paths withRowAnimation:UITableViewRowAnimationAutomatic];

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top