Tapping URL doesn't work in TTTAttributedLabel while there is a UITapGestureRecognizer on its superview

use this gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch for detection your event.

- (BOOL) gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
      if ([touch.view isKindOfClass:[TTTAttributedLabel class]])
      {
           return FALSE;
      }
      else
      {

         return TRUE;
      }
}

you can also use if ([touch.view isKindOfClass:[UIControl class]]) for all UIControl e.g Button even detect with UIGestureRecognizer. hope this help's you


I tried @Nitin's solution but it has a problem as @n00bProgrammer pointed out. Furthermore, user experience became very bad. I had to tap several times to fire tapGesture which is added on a superView.

Here you have a better solution. TTTAttributedLabel has a useful instance method like below.

- (BOOL)containslinkAtPoint:(CGPoint)point

This returns whether an NSTextCheckingResult is found at the given point.

So, use the following code snippet then only link added part of the text will be working as a tappable link and the rest of area will fire your tapGesture as you desired. User experience is excellent as well.

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
    if ([yourTTTAttributedLabel containslinkAtPoint:[touch locationInView:yourTTTAttributedLabel]])
        return FALSE;
    else
        return TRUE;    
}

Set the cancelsTouchesInView property of the gesture recognizer to NO.

gestureRecognizer.cancelsTouchesInView = NO;