UITableVewCell的移动删除

来源:互联网 发布:jc js jk 编辑:程序博客网 时间:2024/05/22 01:17

如何实现UITableViewCell的侧滑删除功能呢?很简单的思路

给cell添加一个长按手势,然后根据手势的状态,在开始的时候给旋转三十度

在移动过程中,捕获快照

在结束的时候判断坐标值,给VIewController发一个删除cell的回调,同时TableView reloadData就可以了

@interface CustomTableViewCell (){    UIView *snapView;}@end@implementation CustomTableViewCell- (void)awakeFromNib {    _containerView.layer.cornerRadius=4;        _shadowView.layer.shadowColor=[UIColor blackColor].CGColor;    _shadowView.layer.shadowOffset=CGSizeMake(2, 2);    _shadowView.layer.shadowOpacity=0.5;    _shadowView.layer.shadowRadius=5;        UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleLongpressGesture:)];    [self.contentView addGestureRecognizer:longPress];}- (void)handleLongpressGesture:(UILongPressGestureRecognizer *)gesture{        CGPoint startPoint = CGPointZero;    switch (gesture.state) {        case UIGestureRecognizerStateBegan:        {            snapView = [_containerView snapshotViewAfterScreenUpdates:NO];            startPoint = [gesture locationInView:self.contentView];            //重设layer锚点            snapView.layer.anchorPoint = CGPointMake(startPoint.x/snapView.layer.frame.size.width-0.1, startPoint.y/snapView.layer.frame.size.height-0.1);            snapView.frame = _containerView.frame;            snapView.transform = CGAffineTransformMakeRotation(M_PI/30);            [self.contentView addSubview:snapView];             self.containerView.hidden = YES;            self.shadowView.hidden = YES;            break;        }        case UIGestureRecognizerStateChanged:        {            CGPoint changePoint = [gesture locationInView:self.contentView];            [UIView animateWithDuration:0.05 animations:^{                snapView.layer.position = changePoint;            }];            break;        }        case UIGestureRecognizerStateEnded:        {            NSLog(@"ended");            CGPoint endPoint = [gesture locationInView:self.contentView];            if (endPoint.x>self.contentView.bounds.size.width-50) {                if (self.cellBlock) {                    self.cellBlock(YES, _cellIndex);                }            }else            {                if (self.cellBlock) {                    self.cellBlock(NO, _cellIndex);                }            }            [snapView removeFromSuperview];            self.containerView.hidden = NO;            self.shadowView.hidden = NO;                                    break;        }        default:            break;    }}


ViewController

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{    CustomTableViewCell *cell = (CustomTableViewCell *)[tableView dequeueReusableCellWithIdentifier:@"customCell"];    cell.cellIndex = indexPath;    cell.cellBlock = ^(BOOL isDelete, NSIndexPath *index){        if (isDelete) {                        [_mTableView beginUpdates];            rowCount--;            [_mTableView deleteRowsAtIndexPaths:@[index] withRowAnimation:UITableViewRowAnimationRight];            [_mTableView endUpdates];            dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{                [_mTableView reloadData];            });                   }    };    cell.selectionStyle = UITableViewCellSelectionStyleNone;    return cell;}

运行结果


0 0