我正在尝试阻止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];
}
}
答案 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;
}