我想知道是否有人在UILabel上使用了userInteractionEnabled方法来允许标签像按钮一样(或者只是触发一个方法)。任何帮助将不胜感激。干杯!
更新(4/30/09 @ 1:07pm)澄清:我有一个标准的InfoButton,在它旁边我想放置一个带有文本“settings”的标签,我希望标签的功能就像按钮一样(翻转到设置屏幕。所以,基本上我需要将已经定义的showSettinsView绑定到“infoLabel”标签;用户点击infoButton或infoLabel并触发该方法。
infoButton已经在运行,并且正在使用IBAction来触发该方法。我想知道如何连接标签以实现相同的方法。就这些。干杯!
答案 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");
}
}