首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >UITableViewCell不尊重shouldIndentWhileEditing =不?

UITableViewCell不尊重shouldIndentWhileEditing =不?
EN

Stack Overflow用户
提问于 2014-08-09 20:43:17
回答 2查看 3K关注 0票数 2

当我将UITableView放入编辑模式时,我一直试图阻止(-) delete指示器出现。

为清晰起见更新:

这张表是这样的:

这是我在- (NSArray *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath中设置的

当我点击重新排序,我进入编辑模式。我不想让这些东西显示:

我已经通过限制从editActionsForRowAtIndexPath显示的按钮来删除第三个屏幕截图,但我甚至不想进入这个部分。我只希望编辑模式被重新排序。

/Updates

我尝试过设置UITableViewCell.shouldIndentWhileEditing = NO

直接在该小组:

代码语言:javascript
复制
cell.indentationLevel = -3;
cell.shouldIndentWhileEditing = NO;

在接口生成器中

在适当的委托方法中

代码语言:javascript
复制
- (BOOL)tableView:(UITableView *)tableview shouldIndentWhileEditingRowAtIndexPath:(NSIndexPath *)indexPath
    {
        NSLog(@"shouldIndentWhileEditingRowAtIndexPath");
        return NO;
    }

我还显示了操作列表中的项目。在编辑模式下,我根本没有打算删除,只是重新浏览。我调整了一些东西,所以我只在用户滑动时显示删除,但我宁愿(-)根本不显示:

代码语言:javascript
复制
- (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
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-11 11:56:26

我强迫删除指示符出现。范尼亚斯有一个示例项目,它向我展示了我做错了什么。

我的editingStyleForRowAtIndexPath方法需要如下所示:

代码语言:javascript
复制
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:   (NSIndexPath *)indexPath
{
//return UITableViewCellEditingStyleDelete;
return tableView.isEditing ? UITableViewCellEditingStyleNone: UITableViewCellEditingStyleDelete;
}
票数 2
EN

Stack Overflow用户

发布于 2014-08-09 21:52:30

如果您不想允许删除,只需要重新排序,那么就没有必要对缩进做任何事情。相反,只需:

代码语言:javascript
复制
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return UITableViewCellEditingStyleNone;
}

并且根本不实现tableView:commitEditingStyle:forRowAtIndexPath:方法。

您还可以避免从deleteAction返回tableView:editActionsForRowAtIndexPath:

这将防止行删除。您现在可以根据需要支持重新排序。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25222872

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档