检测滑动删除按钮和编辑模式下的删除按钮之间的区别?

5

我目前有一个UITableView,可以启用滑动删除(滑动即可出现删除按钮)。我还有一个编辑按钮,当按下时,会针对每个单元格滑入红色的删除圆圈。点击其中一个圆圈会导致删除按钮出现,就好像我已经滑动了该单元格。

我想检测删除按钮是通过红色圆圈之一创建的(即在编辑模式下),还是直接在单元格上滑动(原因是如果用户误触,他们可能会丢失大量数据,所以我希望用户确认是否通过编辑模式进入)。

我尝试过tableView的isEditing属性,但无论我如何获得删除按钮,它都是YES。有没有更细致的方法来检测这一点呢?

提前感谢!


在两种情况下都需要确认。在编辑模式下,也有可能犯错误(选择多余的项目进行删除)。 - ilya n.
这不是批量删除模式,因此在编辑更多时,您需要先点击红色圆圈,然后再点击删除按钮。这似乎足够安全,但对于只需滑动+点击的选项,我想确认一下。 - Luke
4个回答

9
更简单的方法是使用UITableView委托支持,以便知道何时要进入单行编辑。在调用setEditing:animated:之前,tableView:willBeginEditingRowAtIndexPath:委托调用会发生,这使得您可以避免任何正常的编辑设置,如创建插入行等。 tableView:willEndEditingRowAtIndexPath:在调用setEditing:animated之后被调用。
因此,代码非常简单:
- (void)tableView:(UITableView *)tableView willBeginEditingRowAtIndexPath:(NSIndexPath *)indexPath
{
    self.singleRowDeleteMode = YES;
}

- (void)tableView:(UITableView *)tableView didEndEditingRowAtIndexPath:(NSIndexPath *)indexPath
{
    self.singleRowDeleteMode = NO;
}

- (void)setEditing:(BOOL)editing animated:(BOOL)animated
{
    [super setEditing:editing animated:animated];
    if (self.singleRowDeleteMode) { return; }
    // Continue setup of normal edit mode
}

答案节省了很多我的时间!谢谢! - Yoshiharu Yamada

3
  1. 继承UITableViewCell并在其头文件中添加以下属性:

@property (nonatomic) UITableViewCellStateMask cellEditingState;

  1. 在您的自定义单元格中,在其.m文件中添加以下覆盖:
-(void)willTransitionToState:(UITableViewCellStateMask)state
{
    [super willTransitionToState:state];
    self.cellEditingState = state;
}
  1. 现在,在您的UITableView委托中,当您覆盖

-(void)tableView:commitEditingStyle:forRowAtIndexPath:

之后,您可以通过检查来识别删除按钮在向左滑动后被点击的情况:

    YourCustomCellClass *cell = (YourCustomCellClass *)[tableView cellForRowAtIndexPath:indexPath];
    BOOL shouldReturnToNoneEditingMode = (cell.cellEditingState == UITableViewCellStateShowingDeleteConfirmationMask);

不错的解决方案。对我有效。 - Umair

0

你需要做的第一件事是添加一个属性:

@property (nonatomic, assign) BOOL isTableViewEditing;

当点击编辑按钮并进入编辑模式时,请将此属性设置为相应的值。当您收到调用 tableView:commitEditingStyle:forRowAtIndexPath: 的请求时,您可以使用此属性来查看它是从滑动操作调用还是在编辑模式下调用。


0

苹果专门设计了删除模式需要两个手势。在编辑模式下,您需要:

  1. 按左侧的删除按钮。
  2. 按右侧的删除按钮。

在非编辑模式下,您需要:

  1. 滑动单元格。
  2. 按右侧的删除按钮。

添加第三个验证步骤是过度的,会导致糟糕的用户体验。


1
我同意,但我不是UX设计师,所以我必须让这些东西工作 ;) - Luke
2
告诉你的用户体验设计师辞掉他们的日常工作。我添加了另一个答案,应该会对你有所帮助。 - Guy Kogus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接