博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
视图事件穿透
阅读量:4540 次
发布时间:2019-06-08

本文共 943 字,大约阅读时间需要 3 分钟。

目标:现有ViewA和ViewB、ViewC。ViewB、ViewC都添加在ViewA上,但是ViewC遮挡了ViewB,ViewC上的处理事件后需要让事件继续传递到ViewB上。例如有一个遮挡层,遮挡层下有一个UITextField控件,点击遮挡层(UITextField范围内),遮挡层需要隐藏,并且UITextField控件会成为第一响应者,键盘弹出。

方案:重新ViewC的hitTest方法

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
  //父视图 UIView *view = self.superview;   //点击点在父视图的位置 CGPoint superPoint = [self convertPoint:point toView:view];   //搜索父视图的所有子视图,让子视图能有机会处理该事件 for (UIView *subview in [view.subviews reverseObjectEnumerator]) { if (subview == self) continue; CGPoint convertedPoint = [subview convertPoint:superPoint fromView:view]; UIView *hitTestView = [subview hitTest:convertedPoint withEvent:event]; if (hitTestView) { [self removeFromSuperview];  //移除掉自身(遮挡层Demo用法) return hitTestView; } } [self removeFromSuperview]; //移除掉自身(遮挡层Demo用法)
return nil; }

 

转载于:https://www.cnblogs.com/oyhj/p/6179946.html

你可能感兴趣的文章
Swift 枚举和结构
查看>>
Material Design Animation 触摸反馈、揭露动画
查看>>
[转]my97 datepicker IE9+ 故障修复方法
查看>>
CRM 2013 Reporting Extensions for SSRS 安装及问题解决
查看>>
URL中传递JSON数据
查看>>
Test checkout of feature 'Compiler' failed 解决方法(转载)
查看>>
React Native for android 项目驱动教程
查看>>
Python开发之路
查看>>
websocket工作原理
查看>>
mini日历实现
查看>>
codevs1214 线段覆盖(贪心)
查看>>
Spring boot(4)-应用打包部署
查看>>
spring的条件装配bean
查看>>
手机网络制式常识
查看>>
js获取网页高度
查看>>
Objective - C 小谈:控制器的管理
查看>>
学习总结 JDBC
查看>>
javascript的DOM操作及实例
查看>>
Step by Step 开发dynamics CRM
查看>>
【Spring Boot学习之六】Spring Boot整合定时任务&异步调用
查看>>