我有自定义单元格的表格视图。细胞充满了我的数据。 现在我想让用户重新排列行。我已经实现了这些方法,但是在拖动以重新排序单元格时,我可以看到它显示它正在尝试但不能移动到任何地方。它像10像素一样移动,好像它会重新排列,但又回到它的位置。如何使用自定义单元重新排序行?
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (editingStyle == UITableViewCellEditingStyleDelete)
{
[self.dataSource removeObjectAtIndex:indexPath.row];
[tableView reloadData];
}
}
-(UITableViewCellEditingStyle)tableView:(UITableView*)tableView editingStyleForRowAtIndexPath:(NSIndexPath*)indexPath
{
if (self.mytableView.editing)
{
return UITableViewCellEditingStyleDelete;
}
return UITableViewCellEditingStyleNone;
}
-(BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
return YES;
}
-(BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath
{
return YES;
}
-(void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath
{
id stringToMove = [self.dataSource objectAtIndex:sourceIndexPath.row];
[self.dataSource removeObjectAtIndex:sourceIndexPath.row];
[self.dataSource insertObject:stringToMove atIndex:destinationIndexPath.row];
}
-(NSIndexPath *)tableView:(UITableView *)tableView targetIndexPathForMoveFromRowAtIndexPath:(NSIndexPath *)sourceIndexPath toProposedIndexPath:(NSIndexPath *)proposedDestinationIndexPath
{
if (proposedDestinationIndexPath.section != sourceIndexPath.section)
{
return sourceIndexPath;
}
return proposedDestinationIndexPath;
}
答案 0 :(得分:1)
我知道这已经过时但我仍会回答。这里的问题是您的tableView: targetIndexPathForMoveFromRowAtIndexPath: toProposedIndexPath:
方法(您的上一个方法)
你的逻辑阻止任何移动发生。你的if语句:
if (proposedDestinationIndexPath.section != sourceIndexPath.section)
说如果所需的位置(用户想要带位单元格的位置)不是我当前的位置,则返回我当前的位置(所以不要移动细胞)。否则,如果我想要的位置(我要去的新位置)是我当前的位置然后返回所需的位置(实际上是我当前的位置)。
我希望这是有道理的,所以基本上你说无论如何,确保每个单元格始终保持在当前位置。要解决此问题,请删除此方法(除非有非法移动,否则不需要这样做)或切换两个return语句,所以:
-(NSIndexPath *)tableView:(UITableView *)tableView
targetIndexPathForMoveFromRowAtIndexPath:(NSIndexPath *)sourceIndexPath
toProposedIndexPath:(NSIndexPath *)proposedDestinationIndexPath {
if (proposedDestinationIndexPath.section != sourceIndexPath.section) {
return proposedDestinationIndexPath;
}
return sourceIndexPath;
}
事实上,允许重新安排所需的唯一方法是:tableView: moveRowAtIndexPath: toIndexPath:
。所以,除非你想要其他方法中的特定行为,你可以保存一些代码并删除大部分代码(特别是因为在这种情况下你主要只是实现默认值)。