UILongPressGestureRecognizer未调用其目标方法 [英] UILongPressGestureRecognizer not calling its target method
问题描述
此功能适用于iOS 11上的设备,但我的设备已更新至iOS 12不再有效:
This worked with devices on iOS 11, but with my device updated to iOS 12 it no longer works:
//the viewcontroller is initiated with UIGestureRecognizerDelegate
let longPressGesture = UILongPressGestureRecognizer(target: self, action: #selector(longPress))
//in cellForRowAt:
longPressGesture.minimumPressDuration = 1.0
longPressGesture.delegate = self
longPressGesture.cancelsTouchesInView = false
cell.addGestureRecognizer(longPressGesture)
@objc func longPress(longPressGestureRecognizer: UILongPressGestureRecognizer) {
//never called
}
我也尝试将手势识别器添加到按钮,以确保它不是tableview的问题,并且longPress函数仍然没有被调用。
I also tried adding the gesture recognizer to a button in viewDidLoad to ensure it wasn't an issue with the tableview, and the longPress function is still not getting called.
推荐答案
//the viewcontroller is initiated with UIGestureRecognizerDelegate
let longPressGesture = UILongPressGestureRecognizer(target: self, action: #selector(longPress))
您似乎正在尝试将 longPressGesture
设置为UIViewController的实例属性,同时将其目标和操作作为其初始值设定项的一部分。那是行不通的,因为在初始化时,目标 self
不是实例。还没有实例;
It looks like you are trying to make longPressGesture
an instance property of your UIViewController while giving it a target and action as part of its initializer. That's not going to work, because at the time it is initialized, the target, self
, is not the instance. There is no instance yet; the instance is what we are in the middle of creating!
相反,将该行移动到 cellForRowAt:
中,就像这样:
Instead, move that line into cellForRowAt:
, like this:
//in cellForRowAt:
let longPressGesture = UILongPressGestureRecognizer(target: self, action: #selector(longPress))
longPressGesture.minimumPressDuration = 1.0
longPressGesture.delegate = self
longPressGesture.cancelsTouchesInView = false
cell.addGestureRecognizer(longPressGesture)
这篇关于UILongPressGestureRecognizer未调用其目标方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!