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)
Другие вопросы по тегам