在 Swift - iOS 中将 UIView 上的手势转移到 UITableView
Transfer gestures on a UIView to a UITableView in Swift - iOS
我的布局在页面顶部有一个 UIView
,在它的正下方,我有一个 UITableView
。
我想要做的是将 UIView
上的手势交互转移到 UITableView
,因此当用户在 UIView
上拖动 up/down ],UITableView
垂直滚动。
我尝试了以下代码
tableView.gestureRecognizers?.forEach { uiView.addGestureRecognizer([=12=]) }
但它以某种方式从 UITableView
中删除了 gestureRecognizers :/
Obs.: UIView
不能是 UIScrollView
的 Header
这很棘手
有什么问题?
Your top view is not allowed to pass through view behind it...
可能的解决方案是什么
- 将所有触摸传递到它后面的视图(似乎不可能或实际上非常困难)
- 告诉 window 忽略顶视图上的触摸(简单)
第二个选项更好更简单。
所以你需要做的是创建 UIView
和 override
的子class
override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView?
和 return 如果您在 hitTest
操作
上发现相同的视图,则为零
这里是测试和工作示例
class PassThroughME : UIView {
override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
return super.hitTest(point, with: event) == self ? nil : self
}
}
就是这样,现在使用 PassThroughME
可以通过将 class 添加到情节提要中的视图或以编程方式添加视图的任何方式
检查图像,我有黑色视图,顶部有 0.7 alpha,我仍然可以滚动
希望对您有所帮助
我的布局在页面顶部有一个 UIView
,在它的正下方,我有一个 UITableView
。
我想要做的是将 UIView
上的手势交互转移到 UITableView
,因此当用户在 UIView
上拖动 up/down ],UITableView
垂直滚动。
我尝试了以下代码
tableView.gestureRecognizers?.forEach { uiView.addGestureRecognizer([=12=]) }
但它以某种方式从 UITableView
中删除了 gestureRecognizers :/
Obs.: UIView
不能是 UIScrollView
Header
这很棘手
有什么问题?
Your top view is not allowed to pass through view behind it...
可能的解决方案是什么
- 将所有触摸传递到它后面的视图(似乎不可能或实际上非常困难)
- 告诉 window 忽略顶视图上的触摸(简单)
第二个选项更好更简单。
所以你需要做的是创建 UIView
和 override
override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView?
和 return 如果您在 hitTest
操作
这里是测试和工作示例
class PassThroughME : UIView {
override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
return super.hitTest(point, with: event) == self ? nil : self
}
}
就是这样,现在使用 PassThroughME
可以通过将 class 添加到情节提要中的视图或以编程方式添加视图的任何方式
检查图像,我有黑色视图,顶部有 0.7 alpha,我仍然可以滚动
希望对您有所帮助