我需要从tableView中删除一行,并且tableview应该更新,我该如何编程呢?
到目前为止我的工作;
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (editingStyle == UITableViewCellEditingStyleDelete)
{
[tableView endUpdates];
[tableView beginUpdates];
///??????????
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
[tableView endUpdates];
}
}
我的表格是使用名为NSArray
的{{1}}填充的,那么如何删除记录并更新我的表格视图?
答案 0 :(得分:2)
您不需要第一次endUpdates
来电。
在beginUpdates
和endUpdates
之间,您还应该从peopleList
数组中删除该对象,这样当您调用{{1}时,表视图和数组都会减少1个元素}。除此之外,它应该工作正常。
答案 1 :(得分:1)
我建议使用NSMutableArray作为存储而不是NSArray。
刚刚更新了存储 - 如果是NSMutableArray(而不是你提到的NSArray),你只需要在调用removeObjectsAtIndex之前调用removeObjectAtIndex。
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (editingStyle == UITableViewCellEditingStyleDelete)
{
...
// Delete the row from the data source
NSLog(@"delete section: %d rol: %d", [indexPath indexAtPosition:0], [indexPath indexAtPosition:1]);
[_items removeObjectAtIndex:[indexPath indexAtPosition:1]];
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
...
}
...
答案 2 :(得分:0)
在表视图的开始/结束更新块中,您需要将peopleList复制到可变数组,删除记录,然后将peopleList设置为已更改数组的不可变副本。
[tableView beginUpdates];
// Sending -mutableCopy to an NSArray returns an NSMutableArray
NSMutableArray *peopleListCopy = [self.peopleList mutableCopy];
// Delete the appropriate object
[peopleListCopy removeObjectAtIndex:indexPath.row];
// Sending -copy to an NSMutableArray returns an immutable NSArray.
// Autoreleasing because the setter for peopleList will retain the array.
// -autorelease is unnecessary if you're using Automatic Reference Counting.
self.peopleList = [[peopleListCopy copy] autorelease];
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
[tableView endUpdates];