objective-c - iOS,UIView点击时会穿透到父视图,而响应了父视图的方法,如何解决?
巴扎黑
巴扎黑 2017-04-17 17:04:31
[iOS讨论组]
巴扎黑
巴扎黑

全部回复(5)
PHPz

父视图的touchesBegan就是会被调到,因为确实到它触发的条件了。


更新:这里说的触发条件是指:
UIView中touchesXXX一系列的默认行为是把触摸事件向上传递。你的subview没有override这个默认行为,父视图自然会收到子视图传上来的消息,从而打印log。

所以下面删除线的做法又不太好了,不是你要的。你可以把subview的touches系列全部override,什么都不做就可以使父视图的touchesbegan不再被调用。

参考资料:UIResponder Class Reference touchesBegan:withEvent:


要么父视图的点击事件你也用tapGestureRecognizer实现,就可以把touchesXXX一系列的全去掉不用自己管理了,眼不见心不烦。

不然你就在父视图的touchesBegan里判断触摸点的位置是不是在subview里,是就不管,不是就"你点到我了"。

关于@loveuqian说的hit testing的一篇收藏http://smnh.me/hit-testing-in-ios/

PHPz

应该不是子视图响应的。UIView默认用户交互开启,又没有添加事件,所以touch事件穿透了由父视图响应。给子视图添加事件试试。

大家讲道理

你把UIview与用户的交互打开了,看下行不行

迷茫

关键词应该是 hitTest

ringa_lee

重写 hitTest

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号