Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/94.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 检测滑动删除按钮和编辑模式下的删除按钮之间的差异?_Ios_Objective C_Uitableview - Fatal编程技术网

Ios 检测滑动删除按钮和编辑模式下的删除按钮之间的差异?

Ios 检测滑动删除按钮和编辑模式下的删除按钮之间的差异?,ios,objective-c,uitableview,Ios,Objective C,Uitableview,我目前有一个UITableView设置,以允许滑动删除(滑动显示删除按钮)。我还有一个编辑按钮,按下该按钮时,每个单元格都会在红色删除圆圈中滑动。点击其中一个圆圈会导致“删除”按钮显示,就好像我刷了单元格一样 我想检测删除按钮是通过其中一个红色圆圈创建的(即在编辑模式下),还是通过直接点击单元格创建的(原因是我希望用户确认他们是否不是通过编辑模式进入的,因为如果他们错误地点击按钮,可能会丢失大量数据) 我尝试了tableView的isEditing属性,但结果是YES,但是我找到了delete按

我目前有一个UITableView设置,以允许滑动删除(滑动显示删除按钮)。我还有一个编辑按钮,按下该按钮时,每个单元格都会在红色删除圆圈中滑动。点击其中一个圆圈会导致“删除”按钮显示,就好像我刷了单元格一样

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

我尝试了tableView的
isEditing
属性,但结果是
YES
,但是我找到了delete按钮。有没有更细致的方法来检测这一点


提前谢谢

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

  • 按左侧的删除按钮
  • 按右边的删除按钮
  • 在非编辑模式下,您必须:

  • 刷一下手机
  • 按右边的删除按钮

  • 添加第三个验证步骤过于繁琐,会导致糟糕的用户体验。

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

    @property (nonatomic, assign) BOOL isTableViewEditing;
    
    当按下“编辑”按钮并进入编辑模式时,请将此属性设置为与该值匹配。当您收到对
    tableView:committeditingstyle:forRowAtIndexPath:
    的调用时,您可以使用此属性查看它是从刷卡调用的还是处于编辑模式

  • 子类UITableViewCell并将此属性添加到其h。文件:
  • @属性(非原子)UITableViewCellStateMask cellEditingState

  • 在自定义单元格中,在其m上。文件中,添加以下替代:
  • 现在,在UITableView的委托中,当您重写
  • -(void)tableView:CommittedItingStyle:forRowAtIndexPath:

    通过选中以下选项,您可以识别使用向左滑动显示删除按钮后点击该按钮的场景:

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

    更简单的方法是使用
    UITableView
    delegate支持来了解何时进入单行编辑。
    tableView:willBeginEditingRowAtIndexPath:
    委托调用发生在调用
    setEditing:animated:
    之前,它允许您避免任何正常的编辑设置,如创建插入行等。在setEditing:animated之后调用
    tableView:willEndEditingRowAtIndexPath:

    因此,代码非常简单:

    - (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
    }
    

    在这两种情况下,我都会确认;在编辑模式下,也可能会出错(选择要删除的额外项目)。这不是批量删除模式,因此在编辑更多内容时,您已经需要点击红色圆圈,然后点击删除按钮。这似乎足够安全,但对于只需滑动+点击的选项,我想确认一下。我同意,但我不是用户体验设计师,所以我必须让这些功能发挥作用;)告诉你的用户体验设计师辞去他们的日常工作。我添加了另一个答案,应该可以帮助你。很好的解决方案。对我来说很有用。这个答案节省了我很多时间!谢谢
    - (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
    }