在我的表视图中,我想修复第一行但允许重新排序所有其他行。我这样用了
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath
{
return indexPath.row > 0; // row 0 cannot be moved
}
以便除了第一行之外的所有行都显示编辑期间的重新排序控制
问题是,虽然我现在不能直接移动第一行,但仍然可以将任何其他行移动到表的顶部,以便第一行移动到第二行,这使得tableView:canMoveRowAtIndexPath:
无用在这种情况下。
我本来希望能够使用委托方法,允许我指定行是否可以移动到某个地方,但这样的方法似乎不存在。
我怎样才能解决我的问题?
答案 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;
}