вставить / создать новую строку в том же разделе uitableview - PullRequest
0 голосов
/ 09 июля 2011

Я застрял в проблеме, у меня есть uitableview со строками, скажем, 5. Если пользователь выбирает одну строку, то новая строка точно под постукиваемой строкой должна быть создана / вставлена ​​с анимацией (как мы видели с скрытыми / невидимыми секциями), и при нажатии на вновь вставленную строку она должна быть удалена.

Я попробовал, но там написано


Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid  
update: invalid number of rows in section 0.  The number of rows contained in an existing section 
after the update (6) must be equal to the number of rows contained in that section before the update 
(5), plus or minus the number of rows inserted or deleted from that section (0 inserted, 0 deleted).'

так каким же должен быть другой способ достижения этой функциональности? Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 09 июля 2011

Изначально у вас есть 5 строк. Вы добавляете новую строку в таблицу, скажем, используя addRowsAtIndexPaths: метод. На этом этапе ваше табличное представление будет вызывать свои методы источника данных, поскольку ему нужно добавить эту новую ячейку.

Но, вероятно, вы по-прежнему возвращаете число строк как 5 (а не 6) из методов источника данных, что привело к несогласованности (поскольку табличное представление ожидает 6 строк, а вы все еще возвращаете 5 строк)

Итак, допустим, что когда табличное представление вызывает cellForRowAtIndexPath: метод для только что созданной ячейки (строка = 5), это может привести к сбою, потому что вы должны делать что-то вроде:

[yourDatasourceArray objectAtIndex:indexPath.row];

Вышеприведенный оператор приведет к сбою, так как indexPath.row равен 5, а в вашем массиве по-прежнему 5 объектов (индекс от 0 до 4). Таким образом, objectAtIndex: 5 приводит к сбою.

0 голосов
/ 10 июля 2011

- (NSInteger)numberOfRowsInSection:(NSInteger)section {
    switch (section) {
        case 0:
            return numberOfRows;
    }
    return 0;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

    numberOfRows ++;
    [tableView deselectRowAtIndexPath:indexPath animated:NO];
    NSMutableArray*  tempArray = [[NSMutableArray alloc] init];
        [tempArray addObject:[NSIndexPath indexPathForRow:indexPath.row +1  inSection:indexPath.section]];
    [tableView beginUpdates];
    [tableView insertRowsAtIndexPaths:tempArray withRowAnimation:UITableViewRowAnimationRight];
    [tableView endUpdates]; 
    [tempArray release];

}



я делал 2 ошибки 1) Я не использовал [tableView beginUpdates] и, очевидно, [tableView endUpdates] после обновления 2) Метод вычисления indexpath для newRow был неоднозначным.

Спасибо большое pratikshabhisikar и Максу Хауэллу за то, что вы уделили нам время и силы.

...