以编程方式将 UITapGestureRecognizer 添加到 Outlet 集合中的 UIView
Programmatically Adding UITapGestureRecognizer To UIViews in Outlet Collection
我正在处理存储在 outlet 集合中的一系列视图。
@IBOutlet var theViews: [UIView]!
在我的 viewDidLoad 函数中,我遍历视图集合,在此期间我创建了一个 UITapGestureRecognizer 并将其添加到视图中。
for v in theViews {
let tap = UITapGestureRecognizer(target: self, action: #selector(self.flipSingleView(sender:)))
tap.delegate = self
tap.numberOfTapsRequired = 1
tap.numberOfTouchesRequired = 1
v.addGestureRecognizer(tap)
v.isUserInteractionEnabled = true
}
这里是选择器指向的函数:
@objc func flipSingleView(sender: UITapGestureRecognizer) {
print("tapped")
}
补充说明:
- 已为这些视图启用用户交互
- 从未达到 flipSingleView 内的断点
- View Controller 实现了 UIGestureRecognizerDelegate(我查看了协议,没有看到在这种情况下有用的函数)
- 已验证所有有问题的视图都与出口集合有出口连接
- 没有任何内容打印到控制台
你提到你的观点在一个出口集合中,所以我假设它看起来像这样:
@IBOutlet var myViews: [UIView]!
不确定您是否需要投入其中的所有内容。试试这个:
// In viewDidLoad
myViews.forEach{ view in
let tap = UITapGestureRecognizer(target: self, action: #selector(handleTap(gesture:)))
tap.numberOfTapsRequired = 1
tap.delegate = self
view.addGestureRecognizer(tap)
}
对于您的处理程序:
@objc func handleTap(gesture: UIGestureRecognizer) {
print("tap")
}
最后,放入委托方法部分,即使它只是空的:
extension ViewController: UIGestureRecognizerDelegate {
// TODO: Fill in as needed
}
要确定是哪个视图发送的,您可以向视图添加标签。
我正在处理存储在 outlet 集合中的一系列视图。
@IBOutlet var theViews: [UIView]!
在我的 viewDidLoad 函数中,我遍历视图集合,在此期间我创建了一个 UITapGestureRecognizer 并将其添加到视图中。
for v in theViews {
let tap = UITapGestureRecognizer(target: self, action: #selector(self.flipSingleView(sender:)))
tap.delegate = self
tap.numberOfTapsRequired = 1
tap.numberOfTouchesRequired = 1
v.addGestureRecognizer(tap)
v.isUserInteractionEnabled = true
}
这里是选择器指向的函数:
@objc func flipSingleView(sender: UITapGestureRecognizer) {
print("tapped")
}
补充说明:
- 已为这些视图启用用户交互
- 从未达到 flipSingleView 内的断点
- View Controller 实现了 UIGestureRecognizerDelegate(我查看了协议,没有看到在这种情况下有用的函数)
- 已验证所有有问题的视图都与出口集合有出口连接
- 没有任何内容打印到控制台
你提到你的观点在一个出口集合中,所以我假设它看起来像这样:
@IBOutlet var myViews: [UIView]!
不确定您是否需要投入其中的所有内容。试试这个:
// In viewDidLoad
myViews.forEach{ view in
let tap = UITapGestureRecognizer(target: self, action: #selector(handleTap(gesture:)))
tap.numberOfTapsRequired = 1
tap.delegate = self
view.addGestureRecognizer(tap)
}
对于您的处理程序:
@objc func handleTap(gesture: UIGestureRecognizer) {
print("tap")
}
最后,放入委托方法部分,即使它只是空的:
extension ViewController: UIGestureRecognizerDelegate {
// TODO: Fill in as needed
}
要确定是哪个视图发送的,您可以向视图添加标签。