I am trying to determine if a UILabel was touched and if so do something. Give ..
.
.
.
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];
.
.
.
Then I write the callback.
- (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];
}
The problem is right now, no matter where I touch in the View the Url is being opened. How do I determine if only just my label was touched?
If you add the label to the class, you can do a hit-test on your view in the touch event with:
- (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] ...];
...
}
}
Also, don't forget to release the URL you allocate (otherwise you are leaking).
You can do this without overriding touchesBegan. Use gesture recognizers.
UILabel *label = ...;
label.userInteractionEnabled = YES;
UITapGestureRecognizer *recognizer = [[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapAction)] autorelease];
[label addGestureRecognizer:recognizer];
- (void)tapAction {
NSLog(@"tap performed");
}
i think the best way for handle is to set flag for each uilabel part and then give the flag number from the code,
label.userInteractionEnabled = YES;
-(void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event {
UITouch *touch = [touches anyobject];
if(touch.view.tag == uurflagnumber)
NSlog(@"touched");
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With