我试图允许用户重新排序UITableView并删除它的单元格。
重新排序工作正常。如果单元格尚未重新排序,删除也可以正常工作。但是,如果我使用moveRowAtIndexPath对单元格重新排序并删除一个单元格,则会删除错误的单元格/数据。假设我已将数据A,B,C
重新排序为A,C,B
。如果我删除“C”,则结果将为A,C
而不是A,B
。我正在使用NSMutableArray从中获取数据并设置为UITableView。
-(void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath {
MyObject *obj = [myArray objectAtIndex:sourceIndexPath.row];
[myArray removeObject:obj];
[myArray insertObject:obj atIndex:destinationIndexPath.row];
}
并删除如下所示:
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
[myArray removeObjectAtIndex:indexPath.row];
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath, nil] withRowAnimation:UITableViewRowAnimationBottom];
[tableView endUpdates];
}
答案 0 :(得分:1)
您还需要正确更新数据源。
试试这个方便的category. ..
@interface NSMutableArray (MoveArray)
- (void)moveObjectFromIndex:(NSUInteger)from toIndex:(NSUInteger)to;
@end
- (void)moveObjectFromIndex:(NSUInteger)from toIndex:(NSUInteger)to
{
if (to != from) {
id obj = [self objectAtIndex:from];
[self removeObjectAtIndex:from];
if (to >= [self count]) {
[self addObject:obj];
} else {
[self insertObject:obj atIndex:to];
}
}
}
@end
答案 1 :(得分:1)
您发布的代码看起来不错。我认为问题可能在其他地方。有可能你可以修复它取代
[myArray removeObject:obj];
带
[myArray removeObjectAtIndex:sourceIndexPath.row];