Проведя день, когда я бил головой о клавиатуру, я решил поделиться своим диагнозом и решением.Почему мой взгляд не реагирует на жест, используя gestureRecognizer?
Ситуация: Вы добавить настраиваемый Вид пользовательского класса CardView
к мнению ограждающей myCards
в вашем приложении, и хочешь, чтобы каждая карту ответить на водопроводный жест (например, чтобы указать, что вы хотите сбросить карты). Типичный код начинать с:
В вашем ViewController:
class MyVC : UIViewController, UIGestureRecognizerDelegate {
...
func discardedCard(sender: UITapGestureRecognizer) {
let cv : CardView = sender.view! as! CardView
...
}
В вашей конструкции myCards:
cv = CardView(card: card)
myCards.addSubview(cv)
cv.userInteractionEnabled = true
...
let cvTap = UITapGestureRecognizer(target: self, action: Selector("discardedCard:"))
cvTap.delegate = self
cv.addGestureRecognizer(cvTap)
Я нашел аргументы здесь очень запутанным и документация не совсем полезно. Непонятно, что target: argument
относится к классу, который реализует discardedCard(sender: UITapGestureRecognizer)
. Если вы создаете распознаватель и карты в своем ViewController
, это будет self
. Если вы хотите переместить discardedCard
в свой собственный класс вида (например), замените self
на CardView
в моем примере, в том числе на делегированной строке.
Проверяя приведенный выше код, я обнаружил, что функция discardedCard никогда не вызывалась. Что происходило?
Кстати, вам не нужно указывать количество кранов или касаний; по умолчанию - 1 и 1: согласно документам по умолчанию используется 1 касание (пальцы) и 1 крана: см. https://developer.apple.com/library/ios/documentation/UIKit/Reference/UITapGestureRecognizer_Class/index.html# // apple_ref/ОКК/instp/UITapGestureRecognizer/numberOfTouchesRequired – Opus1217