Ios 检测滑动删除按钮和编辑模式下的删除按钮之间的差异?
我目前有一个UITableView设置,以允许滑动删除(滑动显示删除按钮)。我还有一个编辑按钮,按下该按钮时,每个单元格都会在红色删除圆圈中滑动。点击其中一个圆圈会导致“删除”按钮显示,就好像我刷了单元格一样 我想检测删除按钮是通过其中一个红色圆圈创建的(即在编辑模式下),还是通过直接点击单元格创建的(原因是我希望用户确认他们是否不是通过编辑模式进入的,因为如果他们错误地点击按钮,可能会丢失大量数据) 我尝试了tableView的Ios 检测滑动删除按钮和编辑模式下的删除按钮之间的差异?,ios,objective-c,uitableview,Ios,Objective C,Uitableview,我目前有一个UITableView设置,以允许滑动删除(滑动显示删除按钮)。我还有一个编辑按钮,按下该按钮时,每个单元格都会在红色删除圆圈中滑动。点击其中一个圆圈会导致“删除”按钮显示,就好像我刷了单元格一样 我想检测删除按钮是通过其中一个红色圆圈创建的(即在编辑模式下),还是通过直接点击单元格创建的(原因是我希望用户确认他们是否不是通过编辑模式进入的,因为如果他们错误地点击按钮,可能会丢失大量数据) 我尝试了tableView的isEditing属性,但结果是YES,但是我找到了delete按
isEditing
属性,但结果是YES
,但是我找到了delete按钮。有没有更细致的方法来检测这一点
提前谢谢 苹果专门设计了删除模式,需要2个手势。在编辑模式下,您必须:
添加第三个验证步骤过于繁琐,会导致糟糕的用户体验。您需要做的第一件事是添加属性:
@property (nonatomic, assign) BOOL isTableViewEditing;
当按下“编辑”按钮并进入编辑模式时,请将此属性设置为与该值匹配。当您收到对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
}