2016-04-27 2 views
0

私はUITableViewCellをサブクラス化しました。ジェスチャ認識機能を追加しようとしましたが、タップすると何も起こりません。TapGestureRecognizerをセル内のラベルに追加するにはどうすればよいですか?

class MessagesTableViewCell: UITableViewCell { 


    @IBOutlet weak var nameLabel: UILabel! 

    var profileTap:UITapGestureRecognizer? 


    func render(){ 
     if profileTap == nil { 
      print("Here") //prints. 
      profileTap = UITapGestureRecognizer() 
      profileTap?.addTarget(self, action: #selector(MessagesTableViewCell.profileTapped(_:))) 
      nameLabel.addGestureRecognizer(profileTap!) 
     } 
    } 


    func profileTapped(sender: UITapGestureRecognizer!){ 
     print("tapped") 
    } 
} 

セルを選択する必要はありません。私はラベルが必要です。

+3

?あなたは、行メソッドのためにあなたのセルで作成されているセルとしてレコグナイザを追加していますか? –

答えて

0

ラベルのuserInteractionEnabledプロパティがtrueであることを確認してください。デフォルトでは、UILabelはユーザーインタラクティブではありません。

label.userInteractionEnabled = true 

また、UIButtonを使用してください。

+3

userInteractionEnabledがその上のビュー階層全体についてもtrueであることを確認してください。 – OpenUserX03

0

実際にジェスチャー認識機能が必要ですか?もっと良い方法は、単純なブロックとの結合に明確なUIButtonを使用することです:

var closeHandler:(()->())? 


@IBAction func profileTapped(sender: UIButton!){ 
    if let handler = closeHandler { handler() } 
} 

そして、あなたのcellForRowで:方法:あなたがからレンダリング呼ぶのです

cell.closeHandler = { 
      //do your stuff 
     } 
+0

ジェスチャ認識機能を意図した目的に使うことができるときに隠しボタンを追加するのはなぜですか?どのように "より良い"? – dan

+0

"UIButtonオブジェクトは、ユーザーの操作に応じてカスタムコードを実行するビューです。"だから、特別なクラスは、この状況のた​​めにあなたにアップルを提供しています。そのフレームを変更することができます。そのレイヤーを使用して何かを描く、それは独自のUILabelを持っているので、テキストを表示するために別のものを持つ必要はありません。それはさまざまな状態を持っており、あなたは今現在のものが何であるかなどをユーザーに示すことができます。 –

+0

もしあなたが彼のラベルをボタンで置き換えるように彼に言われたら、私はそのすべてのためであったでしょう。あなたは、ジェスチャーレコグナイザーがすでに行っているユーザーのやりとりに反応する以外は、あなたが言ったことのどれもしない明確なUIButtonを使用するように彼に言いました。 – dan

関連する問題