首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何避免在setEditing上删除UITableViewCell调用

如何避免在setEditing上删除UITableViewCell调用
EN

Stack Overflow用户
提问于 2011-06-22 09:47:03
回答 5查看 9.4K关注 0票数 17

我知道,当我实现tableView:willBeginEditingRowAtIndexPath:tableView:didEndEditingRowAtIndexPath:时,滑动到删除并不会调用setEditing:animated: at my UITableViewController (作为UITableView的代表)。

我有一个定制的UITableViewCell实现,它在编辑模式时做一些UI重新安排。我想聪明一点,在表视图单元实现本身(这显然是有意义的)实现setEditing:animated:中的这些更改。

但是,在滑动删除时,我仍然会在表视图单元格实现中得到对setEditing:animated:的调用。而且我没有任何参数可以告诉我我在滑动。调用堆栈也没有显示任何我自己的方法可以让我有机会做一些事情。它显示setEditing:animatedUITableView中被调用。唯一明显的是,它不是在委托处调用的(在本例中是我的控制器)。

当然,我可以在tableView:willBeginEditingRowAtIndexPath:中的单元格上设置一个标志,告诉它下一个setEditing调用将用于滑动,但听起来不太好。

编辑:它甚至不能工作,因为不能保证调用tableView:didEndEditingRowAtIndexPath:,所以我不能将标志设置回原来的位置。

有什么好办法解决这个问题吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-08-06 15:34:18

我认为UITableViewCell的willTransitionToState:实例方法可能就是您正在寻找的方法。就像这样:

代码语言:javascript
复制
- (void)willTransitionToState:(UITableViewCellStateMask)state
{
    if (state == UITableViewCellStateShowingDeleteConfirmationMask) {
        swipedToDelete = YES; // BOOL ivar
    }
}

- (void)setEditing:(BOOL)editing animated:(BOOL)animated
{
    if (swipedToDelete) {
        // do your stuff, or don't
    }
}

是这样吗?

票数 25
EN

Stack Overflow用户

发布于 2013-03-28 22:44:43

我知道这可能已经完成了,但提出的解决方案似乎不是一个完整的简单答案,它们似乎也没有提供良好的示例代码,所以我想我应该添加我的答案。

在类中添加一个私有实例变量:

代码语言:javascript
复制
@implementation MyTableViewController {
    BOOL _cellSwiped;
}

重写setEditing方法以查找_cellSwiped变量,并且只在不滑动的情况下传播。人们似乎缺少的部分是,_cellSwiped需要重新设置为否,否则,您将永远无法使用编辑按钮后,滑动!

代码语言:javascript
复制
- (void) setEditing:(BOOL)editing animated:(BOOL)animated {
    if (!_cellSwiped) {
        [super setEditing:editing animated:animated];
    } else if (!editing) {
        _cellSwiped = NO;
    }
}

最后,添加此方法覆盖以检测swipe:

代码语言:javascript
复制
- (void)tableView:(UITableView *)tableView willBeginEditingRowAtIndexPath:(NSIndexPath *)indexPath {
    _cellSwiped = YES;
}
票数 6
EN

Stack Overflow用户

发布于 2011-07-23 02:18:20

我所做的是这样的:

代码语言:javascript
复制
- (void)tableView:(UITableView *)tableView willBeginEditingRowAtIndexPath:(NSIndexPath *)indexPath
{
    cellSwiped = YES;
    self.editing = NO;
}

然后在

代码语言:javascript
复制
- (void)setEditing:(BOOL)editing animated:(BOOL)animated 

方法只需检查是否设置了cellSwiped ivar并相应地修改UI。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6437916

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档