UITapGestureRecognizer选择器未被调用

时间:2017-04-12 02:46:44

标签: ios swift uikit uigesturerecognizer

在我的主窗口的根视图控制器类中,我设置了一个UITapGestureRecognizer属性。在调用重写的viewDidLoad函数期间,我已通过addGestureRecognizer方法将此属性添加到图像属性。我还将image.isUserInteractionEnabled设置为true。

override func viewDidLoad() {
   image.addGestureRecognizer(tap)
   image.isUserInteractionEnabled = true

   self.view.addSubview(image)
}

var tap = UITapGestureRecognizer(target: self, action: #selector(imagePressed(_ :)))

可悲的是,这不会导致运行时调用imagePressed()。令我困惑的是,以下代码产生了预期的结果。

override func viewDidLoad() {
   var tap = UITapGestureRecognizer(target: self, action:#selector(imagePressed(_ :)))
   image.addGestureRecognizer(tap)
   image.isUserInteractionEnabled = true

   self.view.addSubview(image)
}

所以我的问题是,为什么在第一种情况下不会调用UITapGestureRecognizer的选择器?

使用Swift 3和Xcode 8.2.1

2 个答案:

答案 0 :(得分:2)

我认为这里的问题是addGestureRecognizer。 尝试将viewDidLoad更改为:

override func viewDidLoad() {
    var tap = UITapGestureRecognizer(target: self, action:#selector(imagePressed(_ :)))
    image.isUserInteractionEnabled = true

    self.view.addSubview(image)

    image.addGestureRecognizer(tapGesture)
}

答案 1 :(得分:0)

对于将来的读者:

第一种情况不起作用,因为tap是在加载视图控制器的视图之前实例化的,尽管是在函数声明之后编写的。在调用viewDidLoad()之前,self.viewnil,并且由于UITapGestureRecognizer依赖于视图,因此手势识别器不起作用。

主要内容:在将视图控制器的视图添加到视图层次结构之后,创建添加手势识别器