我正在处理存储在 socket 集合中的一系列 View 。
@IBOutlet var theViews: [UIView]!
在我的 viewDidLoad 函数中,我循环遍历 View 集合,在此期间我创建了一个 UITapGestureRecognizer 并将其添加到 View 中。
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")
}
补充说明:
- 为这些 View 启用了用户交互
- 永远无法到达 FlipSingleView 中的断点
- View Controller 实现 UIGestureRecognizerDelegate(我查看了协议(protocol),没有看到在这种情况下有用的函数)
- 已验证所有有问题的 View 都与 socket 集合有 socket 连接
- 没有任何东西打印到控制台
Best Answer-推荐答案 strong>
你提到你的观点在一个导出集合中,所以我假设它看起来像这样:
@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")
}
最后,为委托(delegate)方法添加一个部分,即使它只是空的:
extension ViewController: UIGestureRecognizerDelegate {
// TODO: Fill in as needed
}
要确定是哪个 View 发送的,您可以在 View 中添加标签。
关于ios - 以编程方式将 UITapGestureRecognizer 添加到 Outlet 集合中的 UIViews,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/48727995/
|