处理UILabel中的触摸事件并将其挂接到IBAction

好的,所以我在界面生成器中创build了一个UILabel ,它显示了一些默认文本“点击开始”。

当用户点击UILabel我想它触发一个IBAction方法: -(IBAction)next; 它更新标签上的文字来说新的东西。
如果这允许我简单地从我的方法拖动连接到我的标签,然后select里面,像一个button,这将是非常方便的。 但是,唉,没有雪茄。

所以无论如何,我想我的问题是,我将不得不UILabel得到这个工作? 或者有什么办法可以在标签上拖动一个button,但使其成为0%不透明。 还是有一个简单的解决scheme,我错过了?

一探究竟:

 UILabel *label = ... label.userInteractionEnabled = YES; UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(labelTap)]; [label addGestureRecognizer:tapGesture]; 

诀窍是启用用户交互。

UILabel从inheritance自UIResponder的UIViewinheritance。 所有UIresponder对象都可以处理触摸事件。 所以在你的类文件里面知道你的视图(包含UIlabel)的实现:

 -(void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event; 

在界面生成器中设置UILabel的标签值。 当touchesBegan方法发生触摸时,检查标签所属视图的标签值:

 UITouch *touch = [touches anyObject]; if(touch.view.tag == MY_TAG_VAL) label.text = @"new text"; 

通过使用IBOutlet前缀声明您的UILabel实例variables,将您的类文件中的代码与界面构build器中的UILabel对象连接起来:

 IBOutlet UILabel *label; 

然后在界面生成器中,你可以连接起来。

您可以使用UIButton,使其透明,即没有图像的自定义types,并添加一个UILabel(居中)。 然后连线正常的button事件。

Swift 3

你有一个IBOutlet

 @IBOutlet var label: UILabel! 

在其中启用用户交互并添加手势识别器

 label.isUserInteractionEnabled = true let tapGesture = UITapGestureRecognizer(target: self, action: #selector(userDidTapLabel(tapGestureRecognizer:))) label.addGestureRecognizer(tapGesture) 

最后,处理水龙头

 func userDidTapLabel(tapGestureRecognizer: UITapGestureRecognizer) { // Your code goes here }