自定义移动tableview单元格:当" moveRowAtIndexPath"时,如何始终将第一个单元格保留在UITableView的顶部。

时间:2015-08-22 16:56:18

标签: ios objective-c uitableview

当我移动其他单元时,我需要保持我的第一个单元总是位于tableview的顶部。我花了很多时间和很多方法按钮我还没弄明白如何解决这个问题。 这是我的代码:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
     //...do something to custom first cell design from xib file

     //...do some thing to custom normal cells(cells at below of first cell)

    [firstcell setEditing:NO animated:YES];
    firstcell.userInteractionEnabled=NO;

     if (indexPath.row==0)
    {
        return firstcell;
    }
    else
    {
        return cell;
    }
}

- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (indexPath.row == 0) // Don't move the first row
        return NO;
    return YES;
}
-(BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
    return YES;
}
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath {
    // i just change datasource for tableview at here
}

当我移动细胞(正常细胞)时,有我的tableview。

我想保持第一个细胞(蓝色细胞)始终位于顶部而不与其他细胞相互作用。

1 个答案:

答案 0 :(得分:3)

您需要再实施一个委托方法:

- (NSIndexPath *)tableView:(UITableView *)tableView targetIndexPathForMoveFromRowAtIndexPath:(NSIndexPath *)sourceIndexPath toProposedIndexPath:(NSIndexPath *)proposedDestinationIndexPath {
    if (proposedDestinationIndexPath.row == 0) {
        // Don't allow a row to be moved to the first row position
        return [NSIndexPath indexPathForRow:1 inSection:0];
    } else {
        return proposedDestinationIndexPath;
    }
}

此代码假设您在表格视图中只有一个部分。

此方法的要点是告诉表视图,如果要移动的行的建议目标不合适,则应使用返回的值。如此处所写,任何将行移动到顶部的尝试都会导致它移动到顶行的正下方。