2016-04-27 32 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

相关问题