UITableView - 控制或阻止删除节中的特定行

时间:2014-07-27 00:54:05

标签: ios objective-c uitableview

我正在尝试阻止UITableView控件的每个部分中每个最后一行的删除。我编写了目前正在运行的代码。

在UITableView的编辑模式下,有没有办法阻止删除按钮出现在特定部分的特定行?

以下是代码:

- (void) tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {

    NSInteger section = indexPath.section;
    NSInteger row = indexPath.row;

    // If table view is asking to commit a delete command...
    if ( editingStyle == UITableViewCellEditingStyleDelete) {
        // Prevent deleting the last row
        int length = [[[MyItemStore sharedStore] getItemsForGivenSection:section] count];

        // PREVENT LAST ROW FROM DELETING
        if ( row == length) {
            return;
        }

        NSArray *items = [[MyItemStore sharedStore] getItemsForGivenSection:section];
        MyItem *item = items[row];
        [[MyItemStore sharedStore] removeItemFromSection:item fromSection:section];

         //Also remove that row from Table view with animation
        [tableView deleteRowsAtIndexPaths: @[indexPath] withRowAnimation:UITableViewRowAnimationFade];
    }
}

3 个答案:

答案 0 :(得分:2)

您可以使用以下内容:

-(BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {

    //Return FALSE for the last row
    if (indexPath.row == [tableView numberOfRowsInSection:indexPath.section] - 1)
        return FALSE;
    }

    //Return TRUE for all other rows
    return TRUE;
}

答案 1 :(得分:0)

你可以这样做,但tableView:commitEditingStyle:forRowAtIndexPath为时已晚,因为当用户已经触发删除时会调用它。您可以从UITableViewCellEditingStyleNone返回tableView:editingStyleForRowAtIndexPath:或设置editingStyle的{​​{1}}属性。听起来你想和前者一起去,如果它是每个部分的最后一行,则返回none。

答案 2 :(得分:0)

您可以在Table View Controller中使用此代码:

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView 
           editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (indexPath.row == [tableView numberOfRowsInSection:indexPath.section] - 1)
        return UITableViewCellEditingStyleNone;
    }

    return UITableViewCellEditingStyleDelete;
}