J'ai trouvé en effet un autre moyen sans utiliser de vue Web mais gardez à l'esprit que cela utilise une API privée et peut être rejeté dans l'Appstore:
EDIT: Mon application a été approuvée par Apple bien que l'utilisation de l'API privée!
Déclarez d'abord une catégorie sur UITextView avec les méthodes
- (id)contentAsHTMLString;
- (void)setContentToHTMLString:(id)arg1;
Ils font juste ce qui suit:
- (id)contentAsHTMLString;
{
return [super contentAsHTMLString];
}
- (void)setContentToHTMLString:(id)arg1;
{
[super setContentToHTMLString:arg1];
}
Maintenant, écrivez une méthode pour les liens colorés:
- (void) colorfillLinks;
{
NSString *contentString = [self.textViewCustomText contentAsHTMLString];
contentString = [contentString stringByReplacingOccurrencesOfString:@"x-apple-data-detectors=\"true\""
withString:@"x-apple-data-detectors=\"true\" style=\"color:white;\""];
[self.textViewCustomText setContentToHTMLString:contentString];
}
Il définit l'attribut de style avec une couleur spécifique sur tous les types de liens.
Les UITextViews sont rendus Webiview comme via des divs afin que vous puissiez même aller plus loin et colorer chaque type de lien séparément:
<div><a href="http://www.apple.com" x-apple-data-detectors="true" style="color:white;" x-apple-data-detectors-type="link" x-apple-data-detectors-result="0">http://www.apple.com</a></div>
Le x-apple-data-detectors-type="link"
est l'indicateur du type exact du lien
ÉDITER
Sur iOS7
ce ne fonctionne plus. Dans iOS7, vous pouvez facilement changer la couleur du lien de UITextViews en définissant la couleur de teinte. Tu ne devrais pas appeler
- (id)contentAsHTMLString;
plus, vous obtiendrez une exception. À la place, procédez comme suit si vous souhaitez prendre en charge iOS 7 et les versions antérieures:
- (void) colorfillLinks;
{
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) {
self.tintColor = [UIColor colorWithRed:79.0/255.0
green:168.0/255.0
blue:224.0/255.0
alpha:1.0];
} else if(![self isFirstResponder ]) {
NSString *contentString = [self contentAsHTMLString];
contentString = [contentString stringByReplacingOccurrencesOfString:@"x-apple-data-detectors=\"true\""
withString:@"x-apple-data-detectors=\"true\" style=\"color:#DDDDDE;\""];
[self setContentToHTMLString:contentString];
}
}