检测在“编辑”模式下进行的滑动到删除按钮和删除按钮之间的区别?

时间:2013-11-18 11:38:50

标签: ios objective-c uitableview

我目前设置了UITableView以启用滑动删除(滑动显示“删除”按钮)。我还有一个“编辑”按钮,当按下该按钮时,会在每个单元格的红色删除圆圈中滑动。点击其中一个圆圈会导致“删除”按钮显示为我刷过单元格。

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

我已经尝试了tableView的isEditing属性,但是那个YES但我得到了删除按钮。有没有更细微的方法来检测这个?

提前致谢!

4 个答案:

答案 0 :(得分:6)

更简单的方法是使用UITableView委托支持来了解您何时进入单行编辑。 tableView:willBeginEditingRowAtIndexPath:委托调用在调用setEditing:animated:之前发生,这允许您避免任何正常的编辑设置,例如创建插入行等。tableView:willEndEditingRowAtIndexPath:被称为AFTER 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
}

答案 1 :(得分:3)

  1. 子类UITableViewCell并将此属性添加到其h。文件:
  2.   

    @property(nonatomic)UITableViewCellStateMask cellEditingState;

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

        - (无效)的tableView:commitEditingStyle:forRowAtIndexPath:

        您可以通过检查确定使用向左滑动显示删除按钮后点击的方案:

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

答案 2 :(得分:0)

Apple特别设计了删除模式,需要2个手势。在编辑模式中,您必须:

  1. 按左侧的删除按钮。
  2. 按右侧的删除按钮。
  3. 在非编辑模式下,您必须:

    1. 滑动单元格。
    2. 按右侧的删除按钮。
    3. 添加第三个验证步骤过度,会导致糟糕的用户体验。

答案 3 :(得分:0)

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

@property (nonatomic, assign) BOOL isTableViewEditing;

按下“编辑”按钮并进入编辑模式时,请设置此属性以匹配该值。当您收到tableView:commitEditingStyle:forRowAtIndexPath:的来电时,您可以使用此属性查看是否是通过滑动调用,或者您是否处于编辑模式。