在 iOS 7 上使用覆盖的 setEditing 方法时禁止 UITableViewCell 删除按钮

Posted

技术标签:

【中文标题】在 iOS 7 上使用覆盖的 setEditing 方法时禁止 UITableViewCell 删除按钮【英文标题】:Suppress UITableViewCell delete button when using overriden setEditing method on iOS 7 【发布时间】:2014-01-15 16:14:53 【问题描述】:

我有几个 UITableViewCell 子类,它们覆盖了 - (void)setEditing:(BOOL)editing animated:(BOOL)animated 方法。在我的实现中,当单元格被滑动时,我有动画来显示和隐藏自定义视图。在 ios 6 上,这可以完美运行。我的自定义视图是动画的,并且没有显示默认的删除按钮。然而,在 iOS 7 上,我得到了我的自定义视图和动画以及默认的删除按钮。我正在努力寻找一种方法来使用我被覆盖的setEditing:animated:,而无需获得系统删除按钮。

在我的 UITableViewCell 子类中,我已经像这样覆盖了setEditing:animated:

- (void)setEditing:(BOOL)editing animated:(BOOL)animated

    if (editing) 
        CGFloat buttonWidth = _editButton.frame.size.width;
        [UIView animateWithDuration:0.3
                              delay:0.0 options:UIViewAnimationOptionCurveEaseInOut
                         animations: ^
                             [_shareButtonXConst setConstant:buttonWidth * -3.0];
                             [self layoutIfNeeded];
                         
                         completion:nil];
     else 
        [UIView animateWithDuration:0.3
                              delay:0.0 options:UIViewAnimationOptionCurveEaseInOut
                         animations: ^
                             [_shareButtonXConst setConstant:0.0];
                             [self layoutIfNeeded];
                         
                         completion:nil];
    

在我的 UIViewController 我有:

- (void)loadView

    // ...

    UITableView *tableView = [[UITableView alloc] init];
    _tableView = tableView;
    [_tableView setTranslatesAutoresizingMaskIntoConstraints:NO];
    [_tableView setBackgroundColor:[UIColor clearColor]];
    [_tableView setRowHeight:80.0];
    [_tableView setSeparatorStyle:UITableViewCellSeparatorStyleNone];
    [_tableView setDelegate:self];
    [_tableView setDataSource:self];

    // ...


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

    return YES;


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




- (BOOL)tableView:(UITableView *)tableView shouldIndentWhileEditingRowAtIndexPath:(NSIndexPath *)indexPath

    return NO;


- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath

    return UITableViewCellEditingStyleDelete;

我已经对此进行了相当多的修改,并且在我滑动时无法阻止删除按钮出现。有没有其他人遇到过这个问题?谢谢!

【问题讨论】:

【参考方案1】:

如果您不想要删除按钮,则应在 editingStyleForRow... 数据源方法中返回 UITableViewCellEditingStyleNone

【讨论】:

感谢您的回复。但是,我在这里测试了返回这个UITableViewCellEditingStyleNone,当我在一个单元格上滑动时它根本不会发生任何事情。我没有得到删除按钮或我的自定义动画。 iOS 6 和 7 也是如此。 将您自己的滑动手势识别器添加到您的单元格中。 我试图避免这种情况,但不应该这么懒惰。我添加了自己的手势识别器,一切正常。感谢您的帮助!

以上是关于在 iOS 7 上使用覆盖的 setEditing 方法时禁止 UITableViewCell 删除按钮的主要内容,如果未能解决你的问题,请参考以下文章

如何避免在 UITableViewCell 上滑动删除调用 setEditing

tableview 上的 setediting = true 使单元格附件视图消失?

为啥只有当我覆盖它时,我的 UINavigtionController 栏才会在 iOS 7 上错误地定位? [复制]

如果单元格是第一响应者并且不在屏幕上,则 UITableViewCell setEditing:animated 不会被调用

self.editing 与 self.tableView.editing 和 setEditing 的混淆

UI 测试的 XCode 7 代码覆盖率结果