2016-04-27 37 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對象是執行您的自定義代碼以響應用戶交互的視圖。」所以這是一個特殊的班級爲你提供了這種情況。你可以改變它的框架。使用它的圖層o繪製一些東西,它有它自己的UILabel,所以你不需要另一個顯示文本。它有不同的狀態,並且可以向用戶顯示當前是什麼,等等等等。 –

+0

如果您已經告訴他用一個按鈕替換他的標籤,我會一直這樣做的。你告訴他使用一個清晰​​的UIButton,除了迴應手勢識別器已經做過的用戶交互之外,它沒有你剛剛說的那些事情。 – dan

相關問題