iPhone UITableViewController仅移动表中的特定行

时间:2010-10-23 16:12:44

标签: iphone objective-c uitableview

我已经实施了标准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

如何实现这一目标?

2 个答案:

答案 0 :(得分:4)

请记住,它实际上只移动了一行,而不是交换

您想要实现tableView:targetIndexPathForMoveFromRowAtIndexPath:toProposedIndexPath

请参阅How to limit UITableView row reordering to a section

答案 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

}