2013-12-14 8 views
0

Я читал много о обновлении UITableView после того, как вы удалили строки как IndexPath, так и источник данных, который, похоже, сводится к [tableView startUpdates], запустите любой код обновления, который у вас есть, а затем [tableView endUpdates].Ячейки UITableView удаляются бесславно

Несмотря на следующие многочисленные примеры Т и используя [tableView deleteRowsAtIndexPaths:<indexPaths> withRowAnimation:UITableViewRowAnimationTop]; , я не могу сделать мои строки удалить любым способом, но то, что следующие Изображает:

http://www.youtube.com/watch?v=l6ov1FR0R4g&feature=youtu.be (по существу, если есть п> 1 строк , строка просто мигает, а если есть n = 1 строка, она будет сдвигаться наружу, останавливаться, а затем исчезать).

Мне действительно хотелось бы более плавное поведение, как, может быть, строка скользит, когда строка скользит вверх. Вот код, выполняющий удаление:

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    int idx = [indexPath indexAtPosition:1]; 
    LoLoanedItemDoc *itemDoc = [[self items] objectAtIndex:idx]; 

    // Delete notification 
    [[UIApplication sharedApplication] cancelLocalNotification:[[itemDoc data] notification]]; 

    [tableView beginUpdates]; 

    [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationTop]; 

    // Remove from datasource 
    [[self items] removeObject:itemDoc]; 

    [tableView endUpdates]; 

    // Delete folder 
    [itemDoc deleteDoc]; 
} 
+0

Попробуйте удалить начальные и конечные обновления, они не нужны в этой ситуации. – rdelmar

+0

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

ответ

1

Я сделал это двумя способами, оба из которых работают на меня.

Удалить элемент перед выполнением обновлений.

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (editingStyle == UITableViewCellEditingStyleDelete) { 

     //Delete the item from the data source 
     [self removeProductFromQuoteAtIndexPath:indexPath]; 

     //Do the updates 
     [tableView beginUpdates]; 
     [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade]; 
     [tableView endUpdates]; 
    } 
} 

// Override to support editing the table view. 
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (editingStyle == UITableViewCellEditingStyleDelete) { 
     [shipping removeObjectAtIndex:indexPath.row - 1]; 
     [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade]; 
    } 
} 

Вы выполнять любой тип операции на камере до удаления? (например, у вас есть анимация выдвижного ящика).

+0

Я все еще пытаюсь работать над вашим решением, но похоже, что это не изменяет поведение. Что касается операций с ячейками, нет, я не делаю ничего подобного. Просто очень просто удалить из datasource, удалить из локального магазина и удалить из tableview. – dclowd9901

+0

Вы также можете попробовать изменить UITableViewRowAnimationTop на UITableViewRowAnimationAutomatic. Время от времени у меня был анимационный акт. – random

+0

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

Смежные вопросы