2016-07-25 5 views
1

У меня возникли проблемы с тем, что мой жест нажатия будет работать, когда мой код будет разделен на классы. Я все это содержится в одном файле раньше и он работал гладко, так что я полагаю, я сделал что-то неправильно в следующем коде:Swift: tap Жест не распознан

placeContainerView.userInteractionEnabled = true 

let showFullPlaceContainerView = UITapGestureRecognizer(target: self, action: Selector(self.showFullPlaceContainerViewFunction(placeContainerView))) 
placeContainerView.addGestureRecognizer(showFullPlaceContainerView) 

где функция showFullContainerViewFunction(placeContainerView)

func showFullPlaceContainerViewFunction(placeContainerView: PlaceContainerView) { 
    placeContainerView.animateExpandContractContainer() 
} 

и

func animateExpandContractContainer() { 
    print("Tap gesture working") 
    if self.displayingPlaceLabel == false { 
     print(self.displayingPlaceLabel) 
     self.displayingPlaceLabel = true 

     UIView.animateWithDuration(0.4, delay: 0.0, options: [], animations: { 
      self.center.x += 180 
      }, completion: nil) 
    } else { 
     self.displayingPlaceLabel = false 
     UIView.animateWithDuration(0.4, delay: 0.0, options: [], animations: { 
      self.center.x -= 180 
      }, completion: nil) 
    } 

} 

Каким-то образом placeContainerView не распознает краны и не возвращает никаких операторов печати при нажатии.

Любые идеи? Спасибо за вашу помощь!

+1

Я не знаю, как, но селекторы '#selector (className.methodName)' не должны иметь каких-либо параметров. Так что что-то не так с этим http://stackoverflow.com/questions/32085396/using-parameters-in-action-of-uitapgesturerecognizer-in-swift – impression7vx

+1

Я думаю, что ваш селектор ошибочен. Он должен быть «#selector (Classname.showFullPlaceContainerViewFunction (_ :))» вместо «Selector» (self.showFullPlaceContainerViewFunction (placeContainerView)) ' – RJE

+0

@RJE Я заменил его, как вы сказали, и код не дает ошибок, но когда Я запускаю его и пытаюсь нажать «placeContainerView». Я получаю сообщение об ошибке, когда вызывается animateExpandContractContainer - Thread 1: EXC_BAD_ACCESS – tryingtolearn

ответ

1

Изменен Selector синтаксис, как вы предложили

let showFullPlaceContainerView = UITapGestureRecognizer(target: self, action: #selector(self.showFullPlaceContainerViewFunction(_:))) 
placeContainerView.addGestureRecognizer(showFullPlaceContainerView) 

Ваш метод будет как этот

func showFullPlaceContainerViewFunction(recognizer: UITapGestureRecognizer) { 
    let placeContainerView = recognizer.view as! PlaceContainerView 
    placeContainerView.animateExpandContractContainer() 
} 
+0

Мне пришлось использовать предложение RJE для селектора, но это сработало. – tryingtolearn

+1

Приветствуем друга счастливого кодирования :) –

+0

Спасибо, человек! Не могли бы вы объяснить, как я могу использовать распознаватель как другой класс? Эта мысль никогда не приходила мне в голову. Ли UITapGestureRecognizer просто захватывает тот объект, который был использован? – tryingtolearn

2

Посмотрите на placeContainerView и его рамку супервизора и userInteractionEnable.

0

Где параметр ожидаемой функции?

placeContainerView.userInteractionEnabled = true 
let showFullPlaceContainerView = UITapGestureRecognizer(target: self, action: #selector(YourViewController.yourFunction(_:)) 
placeContainerView.addGestureRecognizer(showFullPlaceContainerView) 

Ваша ожидается функция должна выглядеть так:

func yourFunction(tapGestureRecognizer:UITapGestureRecognizer) { 
    // Do something 
} 
Смежные вопросы