Bjö*_*ser 16 iphone uitableview swipe ios
我知道,当我实现tableView:willBeginEditingRowAtIndexPath:并且tableView:didEndEditingRowAtIndexPath:,刷卡到删除不会调用setEditing:animated:我UITableViewController(作为代表UITableView).
我有一个自定义UITableViewCell实现,在进入编辑模式时执行一些UI重新排列.我想要聪明并setEditing:animated:在表视图单元实现本身实现这些更改(这显然是有意义的).
但是,当滑动删除时,我仍然会setEditing:animated:在我的表视图单元格实现中调用.我没有参数告诉我,我正在刷卡.调用堆栈也没有显示我自己的方法,这些方法可以让我有机会做某事.它显示了setEditing:animated被称为UITableView.唯一显而易见的是,它没有在委托中调用(在这种情况下我的控制器).
当然,我可以在单元格中设置一个标志tableView:willBeginEditingRowAtIndexPath:,告诉它下一个setEditing调用是刷卡,但这听起来不是好风格.
编辑:它甚至不起作用,因为它不能保证tableView:didEndEditingRowAtIndexPath:被调用,所以我不能将标志设置回来.
任何想法如何优雅地解决这个问题?
Fil*_*lic 24
我认为UITableViewCell的willTransitionToState: instance方法可能正是您所寻找的.像这样的东西:
- (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
}
}
Run Code Online (Sandbox Code Playgroud)
是吗?
我知道这可能已经完成了死亡,但所提出的解决方案似乎并不是一个完整的简单答案,它们似乎也没有提供良好的示例代码,所以我想我会添加我的答案.
向您的类添加一个私有实例变量:
@implementation MyTableViewController {
BOOL _cellSwiped;
}
Run Code Online (Sandbox Code Playgroud)
覆盖setEditing方法以查找_cellSwiped变量,仅在我们不滑动时传播.人们似乎缺少的部分是_cellSwiped需要重置为NO,否则你将无法在刷卡后使用编辑按钮!
- (void) setEditing:(BOOL)editing animated:(BOOL)animated {
if (!_cellSwiped) {
[super setEditing:editing animated:animated];
} else if (!editing) {
_cellSwiped = NO;
}
}
Run Code Online (Sandbox Code Playgroud)
最后,添加此方法覆盖以检测滑动:
- (void)tableView:(UITableView *)tableView willBeginEditingRowAtIndexPath:(NSIndexPath *)indexPath {
_cellSwiped = YES;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8993 次 |
| 最近记录: |