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!
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 UITextView
s.