以编程方式将 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")
}

补充说明:

你提到你的观点在一个出口集合中,所以我假设它看起来像这样:

@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
}

要确定是哪个视图发送的,您可以向视图添加标签。