ios - 使用 UITapGestureRecognizer 防止按钮在 View 后面时触发

标签 ios swift xcode swift5

我有以下设置:

enter image description here

  1. zPosition = 0 处的蓝色背景
  2. zPosition = 0 处的黄色按钮,具有打印“点击按钮”的操作
  3. 具有灰色背景和 zPosition = 1 处 0.8 alpha 的 UIView,带有 UITapGestureRecognizer,具有打印“点击灰色 View ”的操作

当我点击灰色区域时,会打印“点击灰色 View ”。 但是,如果我点击黄色按钮的位置,则会打印“点击按钮”。 我希望始终打印“点击灰色 View ”,因为该 View 位于按钮前面。 如何防止触发 View 后面的按钮?

我知道我可以将按钮设置为 .isEnabled = false 但这不是一个合适的解决方案,因为灰色背景是在父 View Controller 中创建的,我的所有 View 都继承了它。

我将灰色 View 设置为.isUserInteractionEnabled = true(即使它是默认值),如下所示:In Stackoverflow

我想使用Apple Documentation但问题是有一个按钮和一个手势识别器,而不是多个手势识别器。

知道如何正确执行此操作吗?

最佳答案

@Daljeet 引导我找到解决方案。使用调试 View 层次结构,我意识到我的按钮位于 View 的顶部。我的错误是因为我没有意识到 UIView.layer.zPosition 和层次结构中 subview 的顺序之间的区别。一个 View 可以绘制在另一个 View 后面,但仍然位于 View 层次结构的前面。

解决方案是使用view.bringSubviewToFront(greyView)

请注意,如果您在调用最后一行代码后添加按钮,该按钮将被放置在 View 层次结构的顶部

关于ios - 使用 UITapGestureRecognizer 防止按钮在 View 后面时触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60652705/

相关文章:

ios - 信标区域监控应用程序的 CLLocationManager 的生命周期

ios - Fetched Property 适用于 iOS5 但不适用于 iOS6

objective-c - 在 CLGeocoder (iOS5) 中处理异步事件

iphone - 如何在 xcode 中求立方根?

iphone - 在录制的音频文件末尾添加静音

ios - 如何将 SCNAction 和冲量力应用于 SCNNode

ios - 从模态返回时视频播放器未加载

ios - 向 UITableViewController 内的表格 View 添加左右边距

ios - 如何创建和使用 iOS 框架与扩展共享代码

ios - 生成错误 Xcode 10 - 生成多个命令