我有一个代码片段,如下所示:
[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];
答案 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];