iOS表视图:如何修复第一行但允许重新排序所有其他行?

时间:2014-05-08 07:00:45

标签: ios uitableview

在我的表视图中,我想修复第一行但允许重新排序所有其他行。我这样用了

- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath
{
    return indexPath.row > 0; // row 0 cannot be moved
}

以便除了第一行之外的所有行都显示编辑期间的重新排序控制 问题是,虽然我现在不能直接移动第一行,但仍然可以将任何其他行移动到表的顶部,以便第一行移动到第二行,这使得tableView:canMoveRowAtIndexPath:无用在这种情况下。
我本来希望能够使用委托方法,允许我指定行是否可以移动到某个地方,但这样的方法似乎不存在。
我怎样才能解决我的问题?

6 个答案:

答案 0 :(得分:3)

尝试实施委托方法tableView:targetIndexPathForMoveFromRowAtIndexPath:toProposedIndexPath:

来自文档:

Asks the delegate to return a new index path to retarget a proposed move of a row.

所以看起来你想做的是如果toProposedIndexPath是你的第一行,那么你会想要返回第二行。

答案 1 :(得分:0)

您可以尝试[UITableViewDelegate tableView:targetIndexPathForMoveFromRowAtIndexPath:toProposedIndexPath:]。如果建议的IndesPath是您不想移动的那个,那么从此方法返回正确的索引路径。这将根据您的需要处理行的视觉移动。

您还需要更新[UITableViewDataSource tableView:moveRowAtIndexPath:toIndexPath:]中的数据结构。

答案 2 :(得分:0)

一种可能的解决方案是将第一个单元格作为tableView的标题。 如果标头已存在,则可以使用带有Header + FirstRow内容的自定义标题视图。

答案 3 :(得分:0)

请检查此方法,可能会对您有用。 :)

-(NSIndexPath *)tableView:(UITableView *)tableView targetIndexPathForMoveFromRowAtIndexPath:(NSIndexPath *)sourceIndexPath toProposedIndexPath:(NSIndexPath *)proposedDestinationIndexPath

答案 4 :(得分:0)

- (NSIndexPath *)tableView:(UITableView *)tableView targetIndexPathForMoveFromRowAtIndexPath:(NSIndexPath *)sourceIndexPath toProposedIndexPath:(NSIndexPath *)proposedDestinationIndexPath

在此方法中,如果proposedDestinationIndexPath是第一行,则不更新数据源。

答案 5 :(得分:0)

如果tableview中只有一个部分使用此

- (NSIndexPath *)tableView:(UITableView *)tableView

    targetIndexPathForMoveFromRowAtIndexPath:(NSIndexPath *)sourceIndexPath

    toProposedIndexPath:(NSIndexPath *)proposedDestinationIndexPath {

if (proposedDestinationIndexPath.row == 0) {

    return [NSIndexPath indexPathForRow:0 inSection: proposedDestinationIndexPath.section];

}

// Allow the proposed destination.

return proposedDestinationIndexPath;

}