如何在我的视图控制器上跨多个视图检测触摸事件?
How to detect touch event across multiple views on my view controller?
在我的 viewController 中,我以编程方式创建了几个方块作为子视图。
把它想象成一个棋盘。
我想实现一种方法,当用户触摸子视图时,它会在子视图上执行一些操作(例如,更改单个正方形的背景颜色)。
我尝试使用 UITapGestureRecognizer 未成功 - 我从 Apple 文档中了解到它一次仅适用于一个视图。
你有什么建议吗?
非常感谢
这样做
class YourCustomView : UIView {
func addTapGesture(action : @escaping ()->Void ){
self.gestureRecognizers?.forEach({ (gr) in
self.removeGestureRecognizer(gr)
})
let tap = MyTapGestureRecognizer(target: self , action: #selector(self.handleTap(_:)))
tap.action = action
tap.numberOfTapsRequired = 1
self.addGestureRecognizer(tap)
self.isUserInteractionEnabled = true
}
}
或者如果您要在多种类型的 UIView 中使用它,您甚至可以在 UIView 的扩展中使用它。
然后像这样使用它:
let yourView = YourCustomView()
yourView.addTapGesture{[weak self] in
//implement tap event here
}
请注意,[weak self] 将避免为闭包获取强引用以避免那里的保留循环。
您可以子 class UIWindow class 并在那里处理 - (void)sendEvent:(UIEvent *)event
中的所有事件,例如向所有视图发送通知或以其他方式进行通信。检查以下存储库以获取更多信息:
https://github.com/mwinoto/TapDetectingWindow
在我的 viewController 中,我以编程方式创建了几个方块作为子视图。 把它想象成一个棋盘。
我想实现一种方法,当用户触摸子视图时,它会在子视图上执行一些操作(例如,更改单个正方形的背景颜色)。
我尝试使用 UITapGestureRecognizer 未成功 - 我从 Apple 文档中了解到它一次仅适用于一个视图。
你有什么建议吗?
非常感谢
这样做
class YourCustomView : UIView {
func addTapGesture(action : @escaping ()->Void ){
self.gestureRecognizers?.forEach({ (gr) in
self.removeGestureRecognizer(gr)
})
let tap = MyTapGestureRecognizer(target: self , action: #selector(self.handleTap(_:)))
tap.action = action
tap.numberOfTapsRequired = 1
self.addGestureRecognizer(tap)
self.isUserInteractionEnabled = true
}
}
或者如果您要在多种类型的 UIView 中使用它,您甚至可以在 UIView 的扩展中使用它。
然后像这样使用它:
let yourView = YourCustomView()
yourView.addTapGesture{[weak self] in
//implement tap event here
}
请注意,[weak self] 将避免为闭包获取强引用以避免那里的保留循环。
您可以子 class UIWindow class 并在那里处理 - (void)sendEvent:(UIEvent *)event
中的所有事件,例如向所有视图发送通知或以其他方式进行通信。检查以下存储库以获取更多信息:
https://github.com/mwinoto/TapDetectingWindow