携手发明,一起生长!这是我参加「日新计划 8 月更文挑战」的第30天,点击检查活动概况

前语

原理:运用cancelsTouchesInView特色,控制点击工作优先级

I 设置tableView的点击工作优先级低于cell的选中工作

1.1 运用场景

场景1:比如选择视图,监听蒙版的点击工作就躲藏选择视图。优先处理选择视图的cell选中工作。

iOS小技术:设置tableView的点击工作优先级低于cell的选中工作

场景2:产品列表的产品点击工作,设置低于右侧的操作按钮的点击工作

iOS小技术:设置tableView的点击工作优先级低于cell的选中工作

1.2 运用cancelsTouchesInView特色进行完结

案例1:tableView的UITapGestureRecognizer的优先级低于cell的选中工作

    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] init];
    [[tap rac_gestureSignal] subscribeNext:^(id x) {
        @strongify(self);
        if (self.alpha) {
            [self.viewModel.hiddenSubject sendNext:nil];
        }
    }];
    [self addGestureRecognizer:tap];
    UITapGestureRecognizer *cutTap = [[UITapGestureRecognizer alloc] init];
    cutTap.cancelsTouchesInView = NO;// 设置tableView的点击工作优先级,低于cell的选中工作
    [[cutTap rac_gestureSignal] subscribeNext:^(id x) {
        //        @strongify(self);
        [self.viewModel.hiddenSubject sendNext:nil];
    }];
    [self.tableView addGestureRecognizer:cutTap];

案例2:cell的选中工作低于按钮的点击工作

    self.contentView.backgroundColor = kViewColor;
    UITapGestureRecognizer *cutTap = [[UITapGestureRecognizer alloc] init];
                            cutTap.cancelsTouchesInView = NO;// 设置V的点击工作优先级,低于cell的选中工作
    [[cutTap rac_gestureSignal] subscribeNext:^(id x) {
        NSLog(@" cutTap 点击了cell ");
        if ( self.models.block) {
            self.models.block(self.models);
        }
    }];
    [self.contentView addGestureRecognizer:cutTap];

按钮的点击工作举荐也用addGestureRecognizer:完结。

1.3 其他办法控制工作的传递

  • UIview的 hitTest: withEvent:
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{
    if (point.y<0) {
        return [super hitTest:point withEvent:event];
    }
    return self;
}
  • 交给子视图处理工作
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{
        CGPoint redBtnPoint = [self convertPoint:point toView:self.contentView];
        if ( CGRectContainsPoint(_imgViewdel.frame, redBtnPoint) ) {
            return _imgViewdel;
        }
//    _imgView
        return [super hitTest:point withEvent:event];
}
  • gestureRecognizer代理办法
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{
 if ([touch.view isKindOfClass:[UITextField class]])
    {
        return NO;
    }
    // 若为UITableViewCellContentView(即点击了tableViewCell),则不截获Touch工作
    if ([NSStringFromClass([touch.view class]) isEqualToString:@"UITableViewCellContentView"]) {
        return NO;
    }
    return YES;
}

II、see aslo

iOS Horizontal Popup View 【 水平方向弹出菜单视图】比如:产品列表支撑弹出菜单进行下/上架产品、打印产品价签、修改产品信息、同步网店等操作popover

视频:live.csdn.net/v/173757

demo1下载地址:download.csdn.net/download/u0…

demo 设置两个检验开关 :

检验开关1:将水平方向弹出菜单视图集成到cell

检验开关2:将水平方向弹出菜单视图集成到VC的View

demo2下载地址:download.csdn.net/download/u0…

demo2的内容是:将水平方向弹出菜单视图集成到VC的View

疑问解答,请关注群众号:iOS逆向

1.支撑打开折叠的弹出菜单的完结思路:

1.1将弹出视图添加到keyWindow,蒙版也添加到主窗口(主要原因是点击屏幕的空白处,需求躲藏弹出视图)

1.2展示的时分,动画从右上角往左下脚延伸;躲藏的时分,动画从左下脚往右上角收回 (展示的时分,从上往下,即x,y 渐渐变大)

1.3 内部视图选用collectionView进行布局

1.4 view的frame 是依据当时点击的菜单按钮地点的产品cell进行核算和坐标转换的。

———————————————— 版权声明:本文为CSDN博主「#群众号:iOS逆向」的原创文章,遵从CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:blog.csdn.net/z929118967/…