ios - UIView SubView UIButton 没有响应触摸
问题描述
我有一个 UIButton 位于 UIView 子视图内。视图看起来很好,但按钮没有响应触摸。子视图是嵌入到容器视图中的两个独立的 ViewController。
在情节提要上,所有视图、控制器和按钮都启用了用户交互。我还以编程方式启用了子视图的用户交互。
这是代码:
@IBOutlet var showtimeView: UIView!
@IBOutlet var reviewView: UIView!
var viewTwo: UIView!
var viewThree: UIView!
override func viewDidLoad() {
super.viewDidLoad()
viewTwo = ShowtimesView().view
showtimeView.addSubview(viewTwo)
viewThree = ReviewsView().view
reviewView.addSubview(viewThree)
showtimeView.isUserInteractionEnabled = true
reviewView.isUserInteractionEnabled = true
viewTwo.isUserInteractionEnabled = true
viewThree.isUserInteractionEnabled = true
}
@IBAction func segmentChange(_ sender: Any) {
switch(segment.selectedSegmentIndex) {
case 0:
detailsView.isHidden = false
showtimeView.isHidden = true
reviewView.isHidden = true
break
case 1:
detailsView.isHidden = true
showtimeView.isHidden = false
reviewView.isHidden = true
break
case 2:
detailsView.isHidden = true
showtimeView.isHidden = true
reviewView.isHidden = false
break
default:
break
}
}
还有什么可以阻止位于子视图内部的 UIButton 响应触摸?
编辑:我更改了容器的颜色以检查它是否覆盖了视图控制器。容器没有出现在子视图视图控制器的前面。子视图仍然没有响应触摸。
解决方案
如果按钮顶部有另一个视图,例如容器视图和该容器视图中的视图(以及覆盖该按钮的该容器视图的任何其他视图),则触摸事件不会到达该按钮。
作为补偿,让容器视图(覆盖您的按钮)和其中的视图都派生自以下视图:
class PassthroughView: UIView
{
override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView?
{
let view = super.hitTest(point, with: event)
return view == self ? nil : view
}
}
您可以直接在情节提要中将这两个视图从 UIView 更改为 PassthroughView,然后将上面的类扔到某个地方(我更喜欢它在自己的文件中)。
推荐阅读
- python - NumPy, RuntimeWarning: power 中遇到的无效值。我怎样才能看到我的变量的值?
- python-3.x - 使用 Python 在 AWS 中创建具有名称的快照
- r - 数学运算对每个类别的两列进行分组总和
- powerbi - 将 Survey Monkey 与 Power BI 连接时出现空白行
- c# - 使用 Blazor
给出警告:元素 'option' 不能嵌套在元素 'p' 内 - javascript - 在 Wordpress 主页中显示带有缩略图、标题和页数限制的子页面
- android - iOS/Android NFC 标签读取安全问题
- odata - 如何在 Azure 存储资源管理器中查询“非空”或“非空”
- java - 如何转换列表
- visual-studio-2017 - 我可以在调试模式下停止 Visual Studio URL 解码命令参数吗?