好,所以我有一个 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
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top