UILabel:在标签上使用userInteractionEnabled方法

时间:2009-04-30 19:37:54

标签: objective-c cocoa-touch uikit uilabel

我想知道是否有人在UILabel上使用了userInteractionEnabled方法来允许标签像按钮一样(或者只是触发一个方法)。任何帮助将不胜感激。干杯!

更新(4/30/09 @ 1:07pm)澄清:我有一个标准的InfoButton,在它旁边我想放置一个带有文本“settings”的标签,我希望标签的功能就像按钮一样(翻转到设置屏幕。所以,基本上我需要将已经定义的showSettinsView绑定到“infoLabel”标签;用户点击infoButton或infoLabel并触发该方法。

infoButton已经在运行,并且正在使用IBAction来触发该方法。我想知道如何连接标签以实现相同的方法。就这些。干杯!

3 个答案:

答案 0 :(得分:13)

userInteractionEnabled不是方法,而是属性。但我认为您需要将其设置为YES以允许事件进入UIView超级视图。

您可能希望覆盖包含touchesBegan:withEvent:UIView子视图的UIButton UILabel方法。

在此方法中,测试任何UITouch触摸是否落在UILabel的范围内。

也就是说,CGPoint元素[touch locationInView]CGRect元素[infoLabel bounds]相交?查看函数CGRectContainsPoint以运行此测试。

如果有,请点击NSNotification,与IBAction调用相同的UIButton选择器。

答案 1 :(得分:7)

另一种解决方案可能是使用UIButton,其类型设置为自定义,而不是UILabel。这样,您的第二个按钮看起来像UILabel,您可以将其配置为触发showSettingsView方法。

答案 2 :(得分:2)

我同意Alex 2009年4月30日,如果你不想使用UIButton,我的提议只是一个补充。我解决它的方法是通过

创建一个UILabel
- (id)initWithFrame:(CGRect)frame
{
    label = [[UILabel alloc] initWithFrame: CGRectMake(5, 5, 20, 20)];
    ...
    [label setUserInteractionEnabled: YES];
    [self addSubview: label];
}

然后你可以覆盖触摸*方法,如touchesBegan,touchesEnded类似

- (void) touchesBegan: (NSSet *) touches withEvent: (UIEvent *) event {
      UITouch *touch = [touches anyObject];
      if([touch view] == label) {
          NSLog(@"I've been touched");
       }
   }