以编程方式将UITapGestureRecognizer添加到Outlet Collection中的UIViews

时间:2018-02-11 03:26:28

标签: ios uiview swift4 uitapgesturerecognizer

我正在使用存储在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(我查看了协议,但没有看到在这种情况下有用的功能)。
  • 已验证所有相关视图与插座集合的出口连接
  • 没有任何内容打印到控制台

1 个答案:

答案 0 :(得分:2)

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

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

要确定发送它的视图,您可以在视图中添加标记。