UILongPressGestureRecognizer не вызывает целевой метод
Это работало с устройствами на iOS 11, но с моим устройством, обновленным до iOS 12, оно больше не работает:
//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
}
Я также попытался добавить распознаватель жестов к кнопке в viewDidLoad, чтобы убедиться, что это не проблема с представлением таблицы, а функция longPress до сих пор не вызывается.
1 ответ
Решение
//the viewcontroller is initiated with UIGestureRecognizerDelegate let longPressGesture = UILongPressGestureRecognizer(target: self, action: #selector(longPress))
Похоже, вы пытаетесь сделать longPressGesture
свойство экземпляра вашего UIViewController, в то же время давая ему цель и действие как часть его инициализатора. Это не сработает, потому что во время инициализации цель, self
Это не тот случай. Там еще нет экземпляра; пример - это то, что мы находимся в процессе создания!
Вместо этого переместите эту строку в cellForRowAt:
, как это:
//in cellForRowAt:
let longPressGesture = UILongPressGestureRecognizer(target: self, action: #selector(longPress))
longPressGesture.minimumPressDuration = 1.0
longPressGesture.delegate = self
longPressGesture.cancelsTouchesInView = false
cell.addGestureRecognizer(longPressGesture)