Search code examples
iosiphoneuilabelnsattributedstringuitapgesturerecognizer

Add a tap gesture to a part of a UILabel


I have a NSAttributedString like so:

NSMutableAttributedString *str = [[NSMutableAttributedString alloc] initWithString:@"testing it out @clickhere"];
NSInteger length = str.length;
[str addAttribute:NSForegroundColorAttributeName value:[UIColor bestTextColor] range:NSMakeRange(0,length)];

The NSMutableAttributedString gets set to a UILabel like so:

label.attributedText = str;

How do I make a tap gesture (or something clickable) to another viewcontroller for the words '@clickhere in the string above?

Thanks!


Solution

  • I think, the best way is adding the UIGestureRecognizer to your UILabel and validate the frame that you would like.

    UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
    [_yourLabel addGestureRecognizer:singleTap];
    
    - (void)handleTap:(UITapGestureRecognizer *)tapRecognizer
    {
        CGPoint touchPoint = [tapRecognizer locationInView: _yourLabel];
    
        //Modify the validFrame that you would like to enable the touch
        //or get the frame from _yourLabel using the NSMutableAttributedString, if possible
        CGRect validFrame = CGRectMake(0, 0, 300, 44);
    
        if(YES == CGRectContainsPoint(validFrame, touchPoint)
         {
            //Handle here.
         }
    }