我已经实施了标准UITableViewController
。我在表格中只有一些行是可移动的,即。 canMoveRowAtIndexPath
仅对某些indexPath(对于表的第一部分中的行)返回true。我想只允许那些可移动的行交换,即。其中canMoveRowAtIndexPath
返回true。
EG。我的表看起来像这样:
Row 1
Row 2
Row 3
Row 4
Row 5
第1,2,3行是可移动的。所以我想实现以下行为:第1行只能与第2行或第3行交换。类似地,第2行只能与第1行和第3行交换。 这是一种可能的布局:
Row 3
Row 1
Row 2
Row 4
Row 5
但是,我不希望这种情况发生:
Row 3
Row 5
Row 2
Row 4
Row 1
如何实现这一目标?
答案 0 :(得分:4)
请记住,它实际上只移动了一行,而不是交换。
您想要实现tableView:targetIndexPathForMoveFromRowAtIndexPath:toProposedIndexPath
答案 1 :(得分:0)
您可以控制部分内和部分之间的移动。
- (NSIndexPath *)tableView:(UITableView *)tableView targetIndexPathForMoveFromRowAtIndexPath:(NSIndexPath *)sourceIndexPath toProposedIndexPath:(NSIndexPath *)proposedDestinationIndexPath
{
// Do not allow any movement between section
if ( sourceIndexPath.section != proposedDestinationIndexPath.section)
return sourceIndexPath;
// You can even control the movement of specific row within a section. e.g last row in a Section
// Check if we have selected the last row in section
if ( sourceIndexPath.row < sourceIndexPath.length) {
return proposedDestinationIndexPath;
} else {
return sourceIndexPath;
}
//您可以使用此方法或逻辑来检查节中行的索引并返回sourceIndexPath或targetIndexPath
}