2016-07-25 5 views
1

コードがクラスに分割されているときに、タップジェスチャーを機能させるのに問題があります。私はこれは、すべての以前の一つのファイルに含まれていたし、私は次のコードで間違った何かをしたと仮定して、それがスムーズに働いた:スウィフト:タップジェスチャが認識されない

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がタップを認識しておらず、クリックされたときにprintステートメントが返されません。

アイデア?ご協力いただきありがとうございます!

+1

私はセレクタ '#selector(className.methodNameが)'任意のパラメータを持つべきではないか、しかしわかりません。だから何かが間違っているhttp://stackoverflow.com/questions/32085396/using-parameters-in-action-of-uitapgesturerecognizer-in-swift – impression7vx

+1

あなたのセレクタが間違っていると思います。 'Selector(self.showFullPlaceContainerViewFunction(placeContainerView))'の代わりに '#selector(Classname.showFullPlaceContainerViewFunction(_ :))'にする必要があります。 – RJE

+0

@RJEあなたが言ったように私はそれを置き換えました。私はそれを実行し、 "placeContainerView"をタップしようとすると、animateExpandContractContainerが呼び出された場所でエラーが発生する - スレッド1:EXC_BAD_ACCESS – tryingtolearn

答えて

1

あなたは

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 
} 
関連する問題