J'ai en effet trouvé un autre moyen sans utiliser de webview mais gardez à l'esprit que cela utilise API privé et peut être rejeté dans l'appstore :
EDITAR: Mon application a été approuvée par Apple malgré l'utilisation de l'api privée !
Commencez par déclarer une catégorie sur UITextView avec les méthodes
- (id)contentAsHTMLString;
- (void)setContentToHTMLString:(id)arg1;
Ils font simplement 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 comme des Webiviews via des divs. Vous pouvez donc 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>
El x-apple-data-detectors-type="link"
est l'indicateur du type exact de la liaison
EDITAR
Sur iOS7
cela ne fonctionne plus. Dans iOS7, vous pouviez facilement modifier la couleur des liens des UITextViews en définissant la couleur de la teinte. Vous ne devez pas appeler
- (id)contentAsHTMLString;
plus, vous obtiendrez une exception. Faites plutôt ce qui suit si vous voulez prendre en charge iOS 7 et inférieur :
- (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];
}
}
0 votes
Vérifiez cette réponse en utilisant une sous-vue UIWebDocumentView de l'API privée : stackoverflow.com/a/11745983/111277