9

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

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

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

4

3 回答 3

13

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

您可能想要做的是覆盖包含您的和子视图的touchesBegan:withEvent:方法。UIViewUIButtonUILabel

在此方法中,测试是否有任何UITouch触摸落在UILabel.

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

如果是这样,则触发一个NSNotification调用IBActionUIButton.

于 2009-04-30T20:24:31.347 回答
7

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

于 2010-06-16T14:40:17.533 回答
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];
}

然后你可以覆盖 touches* 方法,比如 touchesBegan,touchesEnded 类似的东西

- (void) touchesBegan: (NSSet *) touches withEvent: (UIEvent *) event {
      UITouch *touch = [touches anyObject];
      if([touch view] == label) {
          NSLog(@"I've been touched");
       }
   }     
于 2012-04-24T15:44:56.143 回答