2009-05-27 2 views
16

Вот что я придумал:Как удалить строку в UITableView вручную?

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:1]; // my table view has 2 sections 
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationTop]; 

Everytime я строю и бежать, он бросает следующее исключение:

Invalid обновление: неверное число строк в разделе 0. Число строки, содержащиеся в существующем разделе после обновления, должны быть равны количеству строк, содержащихся в этом разделе перед обновлением, плюс или минус количество строк, добавленных или удаленных из этого раздела.

Это немного запутанно. Раздел установлен в 1, но исключение говорит, что оно 0.

+4

любил свою линию NSIndexPath * indexPath = [NSIndexPath indexPathForRow: 0 надреза: 1] ;. +1 для вас;) – oberbaum

ответ

29

Я понял.

В дополнении к вышеупомянутому коду, я также необходимо внести изменения в источник данных

[items removeObjectAtIndex:0]; 
+2

Это правильно. –

+8

Для тех, кто получал ошибку, как и я, заявлял в ОП; не забудьте изменить свою модель данных 'before', изменяя содержимое UITableView. – Sean

5
- (IBAction)deleteCustomCellWithUIButton:(id)sender 
{ 
    NSLog(@"Message From Custom Cell Received"); 
    NSIndexPath *indexPath = [self.myTableView indexPathForCell:(UITableViewCell *)[[[sender superview] superview] superview]]; 
    NSUInteger row = [indexPath row]; 
    [self.myDataArray removeObjectAtIndex:row]; 
    [self.myTableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; 
} 
+1

Я рекомендую добавить '[self.myTableView beginUpdates];' перед тем, как вы начнете меняться. И '[self.myTableView endUpdates];' как только вы закончите. – thedp

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