处理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 }