在Uilabel中处理触摸事件,并将其连接到IBACTION
-
02-10-2019 - |
题
好,所以我有一个 UILabel
在接口构建器中创建的,显示了一些“点击要开始”的默认文本。
当用户点击 UILabel
我希望它触发ibaction方法:-(IBAction)next;
这会更新标签上的文本以说一些新内容。
如果这使我可以简单地将连接从方法拖到标签,然后选择“在内部”(如一个按钮),那将是非常方便的。但是,可惜,没有雪茄。
因此,无论如何,我想我的问题是,我将不得不子类 UILabel
为了工作吗?还是有某种方法可以在标签上拖动一个按钮,但使其使其不透明。还是我缺少一个简单的解决方案?
解决方案
看看这个:
UILabel *label = ...
label.userInteractionEnabled = YES;
UITapGestureRecognizer *tapGesture =
[[UITapGestureRecognizer alloc] initWithTarget:self
action:@selector(labelTap)];
[label addGestureRecognizer:tapGesture];
诀窍是启用用户交互。
其他提示
Uilabel从Uiview继承,该Uiview从Uiresponder继承。所有的Uiresponder对象都可以处理触摸事件。因此,在您的类文件中,了解您的视图(包含Uilabel)实现:
-(void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event;
在接口中,构建器设置了Uilabel的标签值。当您的触摸方法中发生触摸时,请检查标签所属视图的标签值:
UITouch *touch = [touches anyObject];
if(touch.view.tag == MY_TAG_VAL)
label.text = @"new text";
您可以通过IBOUTLET前缀声明Uilabel实例变量来将类文件中的代码与接口构建器中的Uilabel对象联系起来:
IBOutlet UILabel *label;
然后,在接口构建器中,您可以将它们连接起来。
您可以使用UIBUTTON,使其透明,即无图像的自定义类型,并在其上添加Uilabel(中心)。然后连接普通按钮事件。
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
}
不隶属于 StackOverflow