如何判断UILabel是否被触摸?

Sea*_*lly 14 iphone events user-interface objective-c

我试图确定UILabel是否被触及,如果有的话.给..

.
.
.
UILabel * site = [[UILabel alloc] initWithFrame:CGRectMake(0, 185, 320, 30)];
site.text = [retriever.plistDict valueForKey:@"url"];
site.textAlignment =UITextAlignmentCenter;
site.backgroundColor = [UIColor clearColor];
site.textColor = [UIColor whiteColor];
site.userInteractionEnabled = YES;
[theBgView addSubview:site];
[site release];
.
.
.    
Run Code Online (Sandbox Code Playgroud)

然后我写回调.

 - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
    retriever = [PListRetriever sharedInstance];
    CGPoint pt = [[touches anyObject] locationInView: self];
        NSURL *target = [[NSURL alloc] initWithString:[retriever.plistDict valueForKey:@"url"]];
        [[UIApplication sharedApplication] openURL:target];
  }
Run Code Online (Sandbox Code Playgroud)

现在的问题是,无论我在视图中触摸的位置是打开的.如何确定是否仅触摸了我的标签?

Kev*_*tre 21

如果您将标签添加到课程中,您可以在触摸事件中对视图进行点击测试:

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
  UITouch *touch = [[event allTouches] anyObject];
  if (CGRectContainsPoint([self.site frame], [touch locationInView:self.view]))
  {
    NSURL *target = [[NSURL alloc] ...];
    ...
  }
}
Run Code Online (Sandbox Code Playgroud)

另外,不要忘记释放您分配的URL(否则您将泄露).


Eug*_*ene 19

您可以在不覆盖touchesBegan的情况下执行此操作.使用手势识别器.

UILabel *label = ...;
label.userInteractionEnabled = YES;
UITapGestureRecognizer *recognizer = [[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapAction)] autorelease];

[label addGestureRecognizer:recognizer];

- (void)tapAction {
  NSLog(@"tap performed");
}
Run Code Online (Sandbox Code Playgroud)