获取tableview insertRowsAtIndexPaths以接受indexOfObject?

时间:2010-04-30 20:28:32

标签: iphone uitableview nsmutablearray nsindexpath

我有一个代码片段,如下所示:

[tableView beginUpdates];
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationLeft];
[tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:[array indexOfObject:[array objectAtIndex:indexPath.row]]] withRowAnimation:UITableViewRowAnimationLeft];
[tableView endUpdates];
[tableView reloadData];

当用户点击附件时执行。第一部分只是提供一个平滑的动画,并不重要,因为tableView在几毫秒后重新加载,但正如我所说,它是提供动画。

应该将选定对象从其当前indexPath移动到同一indexPath数组中的值。

显然,这段代码不起作用,所以我只想知道可以做些什么来修复它?

PS:编译时我也收到警告。通常的“传递参数1''arrayWithObject:'使得整数指针没有强制转换......”(第3行)

结束了这段代码:

[tableView beginUpdates];
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationLeft];
[tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:[array indexOfObject:[arraySubFarts objectAtIndex:indexPath.row]] inSection:0]] withRowAnimation:UITableViewRowAnimationFade];
[tableView endUpdates];

[tableView reloadData];

2 个答案:

答案 0 :(得分:1)

您可以使用NSIndexPath类扩展方法+indexPathForRow:inSection:将行转换为索引路径。更多详情here

如果您删除和插入行的唯一目的是引发动画,您是否考虑过reloadRowsAtIndexPaths:withRowAnimation:方法?

答案 1 :(得分:1)

[tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:[array indexOfObject:[array objectAtIndex:indexPath.row]]] withRowAnimation:UITableViewRowAnimationLeft];

走这条线并将其分开,你得到以下结果:

NSObject *obj = [array objectAtIndex:indexPath.row];
int *index = [array indexOfObject:obj];
NSArray *otherArray = [NSArray arrayWithObject:index];
[tableView insertRowsAtIndexPaths:otherArray withRowAnimation:UITableViewRowAnimationLeft];

你可能想要的是:

NSObject *obj = [array objectAtIndex:indexPath.row];
NSIndexPath *index = [NSIndexPath indexPathForRow:[array indexOfObject:obj] inSection:0];
NSArray *otherArray = [NSArray arrayWithObject:index];
[tableView insertRowsAtIndexPaths:otherArray withRowAnimation:UITableViewRowAnimationLeft];

但为什么你不能这样做?

NSArray *otherArray = [NSArray arrayWithObject:indexPath];
[tableView insertRowsAtIndexPaths:otherArray withRowAnimation:UITableViewRowAnimationLeft];

使用索引从数组中获取对象然后使用该对象查找索引似乎是多余的。只需使用索引。


使用更多代码进行编辑:

NSNumber *obj = [NSNumber numberWithInt:indexPath.row];
int *index = [array indexOfObject:obj];
NSIndexPath *index = [NSIndexPath indexPathForRow:index inSection:0];
NSArray *otherArray = [NSArray arrayWithObject:index];
[tableView insertRowsAtIndexPaths:otherArray withRowAnimation:UITableViewRowAnimationLeft];