Swift 3 UITapGestureRecognizer 未接收点击

all*_*tio 2 uigesturerecognizer ios swift

我想将手势识别器添加到我的视图之一以检测点击,这是我的代码:

class DateTimeContainer: UIView, UIGestureRecognizerDelegate {
    override func awakeFromNib() {
        let gesture = UITapGestureRecognizer(target: self, action: #selector(self.onTap))
        gesture.delegate = self
        self.addGestureRecognizer(gesture)
    }

    func onTap(_ gestureRecognizer: UITapGestureRecognizer) {
        openDatePicker()
    }

    func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
        if touch.view?.tag != self.datePickerTag && !self.isDatePickerOpen() {
            return true
        }
        return false
    }
}
Run Code Online (Sandbox Code Playgroud)

当我点击视图时,代码进入该gestureRecognizer shouldReceive方法并输入返回 true 的条件。

但该onTap方法从未被调用,有人能告诉我为什么吗?

编辑

添加self.isUserInteractionEnabled = true我设法让它工作。但它有一个奇怪的行为:就像它只在主视图中收到点击,而不是在子视图中收到点击。因此,为了简单起见,我通过在视图中添加一个按钮并使用以下方法解决了这个问题:

self.button?.addTarget(self, action: #selector(onTap), for: .touchUpInside)
Run Code Online (Sandbox Code Playgroud)

hoo*_*ooo 5

您可能忘记执行此操作:

self.isUserInteractionEnabled = true
Run Code Online (Sandbox Code Playgroud)

此外,通常 UIViewController 子类通常是目标并包含用于点击手势的方法。

您不需要为点击手势设置委托(通常)