iOS tableviewcell 左滑自定义view

iOS tableviewcell 左滑自定义view

今天接到一个特殊的需求

左滑删除自定义view需求
我手机iOS14的系统 所以只考虑了iOS14 的解决办法 不适用于所有iOS系统

- (void)tableView:(UITableView *)tableView willBeginEditingRowAtIndexPath:(NSIndexPath *)indexPath {
    
    
    // 在 iOS11 以下系统,因为方法线程问题,需要放到主线程执行, 不然没有效果
    dispatch_async(dispatch_get_main_queue(), ^{
    
    
        [self setupSlideBtnWithEditingIndexPath:indexPath];
    });
}
//MARK: 设置左滑按钮的样式
- (void)setupSlideBtnWithEditingIndexPath:(NSIndexPath *)editingIndexPath {
    
    

    // 判断系统是否是 iOS13 及以上版本
    if (@available(iOS 13.0, *)) {
    
    
        for (UIView *subView in self.tableView.subviews) {
    
    
            if ([subView isKindOfClass:NSClassFromString(@"_UITableViewCellSwipeContainerView")] && [subView.subviews count] >= 1) {
    
    
                // 修改图片
                UIView *remarkContentView = subView.subviews.firstObject;
                [self setupRowActionView:remarkContentView];
            }
        }
        return;
    }
}
- (void)setupRowActionView:(UIView *)rowActionView {
    
    
    //获取系统的删除按钮
    UIButton *button = rowActionView.subviews.firstObject;
    // 我这里创建了两个自定义view 防止切换的时候没有加载出来  会显示空白
    if (self.isUseFirstBool) {
    
    
        self.isUseFirstBool = NO;
        [self.testDeleteView setFrame:CGRectMake(0, 0, button.bounds.size.width, button.bounds.size.height)];
            
        [rowActionView addSubview:self.testDeleteView];
    }else{
    
    
        self.isUseFirstBool = YES;
        [self.test2DeleteView setFrame:CGRectMake(0, 0, button.bounds.size.width, button.bounds.size.height)];
            
        [rowActionView addSubview:self.test2DeleteView];
    }
}
-(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{
    
    
    CGPoint redPoint = [self convertPoint:point toView:self.testDeleteView];
    CGPoint red2Point = [self convertPoint:point toView:self.test2DeleteView];
        if ([self.testDeleteView pointInside:redPoint withEvent:event]) {
    
    
            NSLog(@"=======  %f",redPoint.y);
            if (!self.isFirstBool) {
    
    
                self.isFirstBool = YES;
                if (redPoint.y < self.deleteHeight) {
    
    
                    [PopTipView showInView:self wihtTipText:@"移入黑名单"];
                }else if (redPoint.y > self.deleteHeight * 2){
    
    
                    [PopTipView showInView:self wihtTipText:@"忽略并删除"];
                }else {
    
    
                    [PopTipView showInView:self wihtTipText:@"举报"];
                }
            }else{
    
    
                self.isFirstBool = NO;
            }
            return [super hitTest:point withEvent:event];
        }else if ([self.test2DeleteView pointInside:red2Point withEvent:event]){
    
    
            NSLog(@"=======  %f",red2Point.y);
            if (!self.isFirstBool) {
    
    
                self.isFirstBool = YES;
                if (red2Point.y < self.deleteHeight) {
    
    
                    [PopTipView showInView:self wihtTipText:@"移入黑名单"];
                }else if (red2Point.y > self.deleteHeight * 2){
    
    
                    [PopTipView showInView:self wihtTipText:@"忽略并删除"];
                }else {
    
    
                    [PopTipView showInView:self wihtTipText:@"举报"];
                }
            }else{
    
    
                self.isFirstBool = NO;
            }
            return [super hitTest:point withEvent:event];
        }else {
    
    
            return [super hitTest:point withEvent:event];
        }
}

testDeleteView 就是自定义的view 暂时是把问题解决了 有点复杂 后面技术提升了 会在更新 这段代码

大神可以留言改进方案 学习学习 谢谢


猜你喜欢

转载自blog.csdn.net/weixin_43861687/article/details/109405021