我有一个带有自定义单元格的表格视图。单元格充满了我的数据。
现在,我要使用户能够重新排列行。我已经实现了这些方法,但是在拖动以重新排序单元格时,我可以看到它显示出它正在尝试执行但无法移动到任何地方的过程。它像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;
}
最佳答案
我知道这已经很老了,但我仍然会回答。这里的问题是您的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:
。再说一次,除非您希望其他方法中没有特定的行为,否则您可以保存一些代码并删除其中的大部分(特别是因为在这种情况下,您主要只是实现默认值)。关于ios - 如何使用自定义单元格重新排列UITableView?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11878455/