UITableViewCell 不尊重 shouldIndentWhileEditing = NO?
Posted
技术标签:
【中文标题】UITableViewCell 不尊重 shouldIndentWhileEditing = NO?【英文标题】:UITableViewCell not respecting shouldIndentWhileEditing = NO? 【发布时间】:2014-08-09 20:43:17 【问题描述】:当我将 UITableView 置于编辑模式时,我一直试图阻止 (-) 删除指示符出现。
为清晰起见更新:
这是表格的样子:
这是我在 - (NSArray *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath
当我点击重新排序时,我会进入编辑模式。我不希望这些显示:
我通过将editActionsForRowAtIndexPath 中显示的按钮限制为仅删除来解决第三个屏幕截图,但我什至不想进入这部分。我希望编辑模式仅重新排序
/更新
我试过设置 UITableViewCell.shouldIndentWhileEditing = NO
直接在单元格上:
cell.indentationLevel = -3;
cell.shouldIndentWhileEditing = NO;
在界面生成器中
在适当的委托方法中
- (BOOL)tableView:(UITableView *)tableview shouldIndentWhileEditingRowAtIndexPath:(NSIndexPath *)indexPath
NSLog(@"shouldIndentWhileEditingRowAtIndexPath");
return NO;
我还显示了操作列表中的项目。我根本没有计划在编辑模式下删除,只是重新编码。我已经调整了一些东西,所以我只在用户滑动时显示删除,但我宁愿 (-) 根本不显示:
- (void) endEditing
self.editMode = NO;
self.editControlButton.title = @"Reorder";
[self setEditing:NO animated:YES];
//[self.tableView reloadData];
- (void) startEditing
self.editMode = YES;
self.editControlButton.title = @"Done";
[self.tableView setEditing:YES animated:YES];
#pragma - mark UITableViewDelegate
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
return YES;
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
return UITableViewCellEditingStyleDelete;
- (BOOL)tableView:(UITableView *)tableview shouldIndentWhileEditingRowAtIndexPath:(NSIndexPath *)indexPath
NSLog(@"shouldIndentWhileEditingRowAtIndexPath");
return NO;
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
TCORead *item = [self.fetchedResultsControllerDataSource selectedItem];
manager.currentRead = item;
- (NSArray *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath
UITableViewRowAction *deleteAction = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDestructive title:@"Delete" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath)
[self.tableView setEditing:NO];
];
//workaround, rdar://17969970
//normally don't want to be able to get into this menu when reordering
if (!self.editMode)
UITableViewRowAction *shareAction = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleNormal title:@"Share" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath)
[self.tableView setEditing:NO];
];
shareAction.backgroundColor = [UIColor grayColor];
UITableViewRowAction *doneAction = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDestructive title:@"Done" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath)
[self.tableView setEditing:NO];
];
doneAction.backgroundColor = [UIColor greenColor];
[self startEditing];
return @[deleteAction, doneAction, shareAction];
return @[deleteAction];
- (void)tableView:(UITableView *)tableView didEndEditingRowAtIndexPath:(NSIndexPath *)indexPath
[self endEditing];
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
//empty on purpose
【问题讨论】:
当 tableView 进入编辑模式时,你到底想发生什么?如果不想出现删除按钮,为什么还要使用编辑模式? @Dan 谢谢,我已经用截图更新了这个问题。我正在使用编辑模式来允许重新排序。但是,可以处理编辑模式之外的删除 【参考方案1】:我强制删除指示符出现。 Vanyas 有一个示例项目,它向我展示了我做错了什么。
我的 editingStyleForRowAtIndexPath 方法需要如下所示:
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath: (NSIndexPath *)indexPath
//return UITableViewCellEditingStyleDelete;
return tableView.isEditing ? UITableViewCellEditingStyleNone: UITableViewCellEditingStyleDelete;
【讨论】:
【参考方案2】:如果您不想允许删除,只是重新排序,那么就不需要对缩进做任何事情。相反,只需这样做:
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
return UITableViewCellEditingStyleNone;
并且根本不实现tableView:commitEditingStyle:forRowAtIndexPath:
方法。
你也避免从tableView:editActionsForRowAtIndexPath:
返回deleteAction
。
这将防止行删除。您现在可以根据需要支持重新排序。
【讨论】:
如果我使用 UITableViewCellEditingStyleNone,我无法访问我在 editActionsForRowAtIndexPath 中定义的按钮。为了清楚我正在尝试做什么,我已经更新了屏幕截图。谢谢以上是关于UITableViewCell 不尊重 shouldIndentWhileEditing = NO?的主要内容,如果未能解决你的问题,请参考以下文章
约束 UIImageView 高度以尊重 UITableViewCell 中的动态 UILabel 高度
UITableView 单元格中的图像不支持 tintColor