iOS小技能:设置tableView的点击事件优先级低于cell的选中事件
前言
原理:利用cancelsTouchesInView属性,控制点击事件优先级
I 设置tableView的点击事件优先级低于cell的选中事件
1.1 应用场景
场景1:比如筛选视图,监听蒙版的点击事件就隐藏筛选视图。优先处理筛选视图的cell选中事件。
在这里插入图片描述
场景2:商品列表的商品点击事件,设置低于右侧的操作按钮的点击事件
在这里插入图片描述
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
视频:https://live.csdn.net/v/173757 demo1下载地址:https://download.csdn.net/download/u011018979/20598998 demo 设置两个测试开关 : 测试开关1:将水平方向弹出菜单视图集成到cell 测试开关2:将水平方向弹出菜单视图集成到VC的View demo2下载地址:https://download.csdn.net/download/u011018979/20537947 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版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/z929118967/article/details/106406160
相关文章
- UICollectionView iOS 13以下删除动画crash
- Zoom在App Store上架10周年之际 全球iOS和Google Play的累计下载量已超10亿次
- iOS | 申请开发者组织账号
- AnyTrans 8 for mac(专业的ios数据传输工具)v8.9.4激活版
- iOS AppStore上架流程图文详解2021版 (上)
- 【IOS实用玩机技巧】爱思助手 IPA 签名功能常见问题汇总(iOS上架)
- AnyTrans for iOS for mac(ios数据传输管理工具)
- iOS实现图片高斯模糊效果详解手机开发
- iOS 获取手机的型号,系统版本,软件名称,软件版本详解手机开发
- iOS相应触屏事件代码详解手机开发
- iOS—SQLite数据库框架之FMDB -Swift详解手机开发
- Linux与iOS之间的技术对比(linux和ios)
- Linux下开发iOS应用:挑战还是机会?(linux做ios开发)
- 操作系统比较:iOS 与 Linux 操作系统(ios与linux)
- iOS与Linux:新老技术的融合(ios与linux的关系)
- Linux与iOS:越来越亲密的合作伙伴(linux与ios)
- Linux下安装iOS:解决方案(linux安装ios)
- 基于Linux环境下iOS应用开发实践(linux下开发ios)
- 把 Linux 安装到 iOS 设备上的步骤(ios安装linux)
- 间谍软件“飞马”监视超 50 个国家手机用户,苹果 iOS 系统也未能幸免
- iOS 10更新了,怎么用iMessage转账比特币呢?
- 事件还原 | 苹果iOS 10系统“激活锁”绕过漏洞,丢失保护功能形同虚设?
- 基于 Bazel的 iOS MonoRepo 实践