我目前设置了UITableView以启用滑动删除(滑动显示“删除”按钮)。我还有一个“编辑”按钮,当按下该按钮时,会在每个单元格的红色删除圆圈中滑动。点击其中一个圆圈会导致“删除”按钮显示为我刷过单元格。
我想检测删除按钮是通过其中一个红色圆圈创建的(即在编辑模式下)还是直接在单元格上滑动(原因是我希望用户确认是否他们没有通过编辑模式进入,因为如果他们误用了它们可能会丢失大量数据。)
我已经尝试了tableView的isEditing
属性,但是那个YES
但我得到了删除按钮。有没有更细微的方法来检测这个?
提前致谢!
答案 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)
@property(nonatomic)UITableViewCellStateMask cellEditingState;
-(void)willTransitionToState:(UITableViewCellStateMask)state { [super willTransitionToState:state]; self.cellEditingState = state; }
- (无效)的tableView:commitEditingStyle:forRowAtIndexPath:
您可以通过检查确定使用向左滑动显示删除按钮后点击的方案:
YourCustomCellClass *cell = (YourCustomCellClass *)[tableView cellForRowAtIndexPath:indexPath];
BOOL shouldReturnToNoneEditingMode = (cell.cellEditingState == UITableViewCellStateShowingDeleteConfirmationMask);
答案 2 :(得分:0)
Apple特别设计了删除模式,需要2个手势。在编辑模式中,您必须:
在非编辑模式下,您必须:
添加第三个验证步骤过度,会导致糟糕的用户体验。
答案 3 :(得分:0)
您需要做的第一件事是添加一个属性:
@property (nonatomic, assign) BOOL isTableViewEditing;
按下“编辑”按钮并进入编辑模式时,请设置此属性以匹配该值。当您收到tableView:commitEditingStyle:forRowAtIndexPath:
的来电时,您可以使用此属性查看是否是通过滑动调用,或者您是否处于编辑模式。