web-dev-qa-db-fra.com

UILabel et NSLinkAttributeName: le lien n'est pas cliquable

Je souhaite utiliser des chaînes attribuées avec NSLinkAttributeName pour créer des liens cliquables à l'intérieur d'une instance UILabel dans mon projet iOS 7, ce qui est enfin possible sans utiliser de bibliothèques externes.

NSURL *url = [NSURL URLWithString:@"http://www.google.com"];

NSDictionary *attr = [NSDictionary dictionaryWithObjectsAndKeys:
                          url, NSLinkAttributeName, nil];

L'application de l'attribut sur une chaîne affiche le texte en bleu et souligné, mais rien ne se passe en cliquant/tapant. L'interaction utilisateur est activée pour l'étiquette. Est-ce que quelqu'un sait comment faire cela? Merci!

34
max.mustermann

Je peux maintenant répondre à ma propre question: j'utilise UITextView au lieu de UILabel maintenant. J'ai formaté le UITextView pour qu'il ressemble et se comporte comme mes étiquettes et j'ai ajouté:

UITextView *textView = [[UITextView alloc] init];
textView.scrollEnabled = NO;
textView.editable = NO;
textView.textContainer.lineFragmentPadding = 0;
textView.textContainerInset = UIEdgeInsetsMake(0, 0, 0, 0);
textView.delegate = self;

N'oubliez pas de définir le délégué, vous devez implémenter UITextViewDelegate! Maintenant, nous implémentons la méthode déléguée:

- (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)url inRange:(NSRange)characterRange
{
     return YES;
}

Cela ouvre automatiquement l'instance NSURL- fournie à partir de la chaîne attribuée dans ma question en cliquant/tapant.

N'oubliez pas: cela fonctionne uniquement sur iOS 7, pour la prise en charge héritée, vous avez besoin de bibliothèques externes

MISE À JOUR:

Faire en sorte que les UITextView se comportent comme des étiquettes était finalement un gâchis total et je suis tombé sur des comportements iOS hideux. J'ai fini par utiliser la bibliothèque TTTAttributedLabel qui est tout simplement géniale et m'a permis d'utiliser des étiquettes au lieu de UITextViews.

48
max.mustermann