在UITableView中移动行

时间:2011-05-20 14:28:06

标签: iphone objective-c

我有一个包含3个部分的UITableView,在编辑模式下可以更改其部分内的行位置而不是其他部分吗?实际上我可以将单元格移动到任何部分。

由于

5 个答案:

答案 0 :(得分:8)

许多正确的答案,但没有人提出完整且妥善的回复。

使用表格视图委托方法 tableView:targetIndexPathForMoveFromRowAtIndexPath:toProposedIndexPath: ,如下所示。

- (NSIndexPath *)tableView:(UITableView *)tableView targetIndexPathForMoveFromRowAtIndexPath:(NSIndexPath *)sourceIndexPath toProposedIndexPath:(NSIndexPath *)proposedDestinationIndexPath
{
    if (proposedDestinationIndexPath.section != sourceIndexPath.section)
    {
        return sourceIndexPath;
    }

    return proposedDestinationIndexPath;
}

不要忘记在 tableView:moveRowAtIndexPath:toIndexPath: 数据源方法中再次检查,如下所示,您不希望在运行时运行应用程序逻辑目的地与来源类似。

- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath  *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath
{
    if(sourceIndexPath == destinationIndexPath)
    {
        return;        
    }

    //application logic
}

答案 1 :(得分:4)

如果我理解你的问题,那么是:使用

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

答案 2 :(得分:0)

试试这个

- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath {
if( fromIndexPath == toIndexPath ) {
return;
}

答案 3 :(得分:0)

像史蒂文和纳拉亚南说的那样,你必须实施方法

- (NSIndexPath *)tableView:(UITableView *)tableView targetIndexPathForMoveFromRowAtIndexPath:(NSIndexPath *)sourceIndexPath toProposedIndexPath:(NSIndexPath *)proposedDestinationIndexPath
你的UITableView委托的

在此方法中,检查sourceIndexPath.section:

  • 如果是允许重新排序的部分,则返回proposedDestinationIndexPath。
  • 如果没有,则返回sourceIndexPath,以便tableView不会移动该行。

我没有写代码,所以你很乐意练习而不是copy'n'paste;)

(编辑:为选项添加列表样式)

答案 4 :(得分:0)

 moveRowAtIndexPath:toIndexPath:

添加此项检查:

 if ( fromIndexPath.section != toIndexPath.section ) return; // prevent moving to another section.