iOS tableviewcell left sliding custom view

iOS tableviewcell left sliding custom view

Received a special request today

Swipe left to delete custom view requirements
The iOS14 system of my mobile phone only considers the solution of iOS14, which is not applicable to all iOS systems.

- (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 is a custom view. For the time being, it solves the problem and is a bit complicated. After the technology is improved, this code will be updated.

Great god can leave a message to improve the plan to learn and learn thank you


Guess you like

Origin blog.csdn.net/weixin_43861687/article/details/109405021