我有一个DotBoss:UIViewController
场景中有十几个UIView,Dot:UIView
(有些是直接的子视图,有些是向下的子视图。)
在最高控制器和点项目之间的链中甚至有容器视图。
十几个点项目知道他们是否被窃听。。。

class Dot:UIView
    {
    private var tap:UITapGestureRecognizer? = nil
    override func awakeFromNib()
        {
        tap = UITapGestureRecognizer(target:self,
                     action: #selector(SnapDot.handleTap(_:)))
        self.addGestureRecognizer(tap!)
        }
    func handleTap(g:UITapGestureRecognizer)
        {
        print("user tapped on this particular Dot...")
        }
    }

我想知道其中一个被点击的时间。
class DotBoss:UIViewController
  {
  func oneDotWasClicked(d:Dot)
   {
   }
  }

如何在迅捷中做到完美?
注意,对于任何在这里搜索的人来说,这个冒泡扩展非常有用:https://blog.veloxdb.com/2016/05/12/bubbling-events-using-uiresponder-in-swift/

最佳答案

点(UIView)和它的最终控制点老板(UIViewController)都是响应者,并且是响应者链上的链接。因此,点可以通过遍历响应程序链来调用其DotBoss中的方法,直到它到达DotBoss:

func handleTap(g:UITapGestureRecognizer) {
    // ... other stuff can go here if necessary ...
    var r : UIResponder = self
    repeat { r = r.nextResponder()! } while !(r is DotBoss)
    (r as! DotBoss).oneDotWasClicked(self)
}

10-01 17:26