好的,所以我在界面构建器中创建了一个UILabel
,显示了一些默认文本“tap to begin”。
当用户点击UILabel
我希望它触发IBAction方法时:
-(IBAction)next;
更新标签上的文字以说出新的内容
如果这允许我简单地将连接从我的方法拖到我的标签然后选择内部触摸,就像按钮一样,那将是非常方便的。但是,唉,没有雪茄。
所以无论如何,我想我的问题是,我是否必须继承UILabel
以使其发挥作用?或者是否有某种方法可以在标签上拖动按钮,但使其为0%不透明。或者我有一个更简单的解决方案吗?
答案 0 :(得分:253)
检查出来:
UILabel *label = ...
label.userInteractionEnabled = YES;
UITapGestureRecognizer *tapGesture =
[[UITapGestureRecognizer alloc] initWithTarget:self
action:@selector(labelTap)];
[label addGestureRecognizer:tapGesture];
诀窍是启用用户交互。
答案 1 :(得分:70)
UILabel继承自UIReeponder继承的UIView。所有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实例变量,将类文件中的代码与接口构建器中的UILabel对象相连接:
IBOutlet UILabel *label;
然后在界面构建器中,您可以将它们连接起来。
答案 2 :(得分:30)
您可以使用UIButton,使其透明,即没有图像的自定义类型,并在其上添加UILabel(居中)。然后连接正常的按钮事件。
答案 3 :(得分:15)
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
}