UILongPressGestureRecognizer не вызывает свой целевой метод - PullRequest
0 голосов
/ 16 октября 2018

Это работало с устройствами на 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, чтобы убедиться, что это не так.t проблема с табличным представлением, и функция longPress по-прежнему не вызывается.

1 Ответ

0 голосов
/ 16 октября 2018
//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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...