Puedo cambiar el color de detectar automáticamente los enlaces en UITextView?

Tuve un UITextView que detecta los números de teléfono y enlaces, pero esto anula mi fontColor y cambiar a blueColor. Es allí una manera de formatear el color de auto detecta los enlaces, o debo tratar un manual versión de esta función?

También el amor para saber si es o cómo es esto posible.
Marque esta respuesta usando una api subvista UIWebDocumentView: stackoverflow.com/a/11745983/111277

OriginalEl autor Leandro Alves | 2009-08-29

9 Kommentare

  1. 146

    En iOS 7, usted puede configurar el tintColor de la UITextView. Afecta el color del enlace, así como el cursor de la línea y el color del texto.

    de iOS 7 también se ha añadido una nueva propiedad a UITextView llamado linkTextAttributes que permiten controlar totalmente el estilo de enlaces.

    Por fin! Bueno oír eso! 🙂
    Me he dado una explicación más detallada en esta respuesta: stackoverflow.com/a/21027340/1202222
    En iOS 10.3, yo no era capaz de anular el NSFontAttributeName con linkTextAttributes. Tuve que especificar manualmente la fuente en el mismo rango que a mi NSLinkAttributeName

    OriginalEl autor stonemonk

  2. 40

    Lugar de utilizar una UITextView, he utilizado un UIWebView y permitió a la «auto-detectar enlaces». Para cambiar el color del enlace, acaba de crear un CSS normal para la etiqueta.

    He utilizado algo como esto:

    NSString * htmlString = [NSString stringWithFormat:@"<html><head><script> document.ontouchmove = function(event) { if (document.body.scrollHeight == document.body.clientHeight) event.preventDefault(); } </script><style type='text/css'>* { margin:0; padding:0; } p { color:black; font-family:Helvetica; font-size:14px; } a { color:#63B604; text-decoration:none; }</style></head><body><p>%@</p></body></html>", [update objectForKey:@"text"]];
    webText.delegate = self;
    [webText loadHTMLString:htmlString baseURL:nil];
    Esto parece extremadamente hackish para tal tarea sencilla.
    Lo sé… pero yo no conozco a ninguna solución menos hackish. Apple realmente debería pensar en estos pequeños detalles.
    bueno, creo que es menos hackish de Alexander respuesta. Todavía loco, que no hay simple de la propiedad para una funcionalidad fundamental.
    la pregunta es acerca del textview no webview!
    es un trabajo para mí…Gracias @LeandroAlves.

    OriginalEl autor Leandro Alves

  3. 24

    Puede utilizar UIAppearance protocolo para aplicar los cambios para todo el texto vistas:

    Swift 4.x:

    UITextView.appearance().linkTextAttributes = [ .foregroundColor: UIColor.red ]

    Swift 3.x:

    UITextView.appearance().linkTextAttributes = [ NSForegroundColorAttributeName: UIColor.red ]

    Swift 2.x:

    UITextView.appearance().linkTextAttributes = [ NSForegroundColorAttributeName: UIColor.redColor() ]

    Objective-C:

    [UITextView appearance].linkTextAttributes = @{ NSForegroundColorAttributeName : UIColor.redColor };

    Apariencia para UITextView no está documentado, pero funciona bien.

    Tenga en cuenta UIAppearance notas:

    iOS se aplica apariencia cambia cuando una vista entra en una ventana, no cambia la apariencia de una vista que ya está en una ventana. Para cambiar la apariencia de un punto de vista que es en la actualidad en una ventana, quitar de la vista desde el punto de vista de la jerarquía y, a continuación, poner de nuevo.

    En otras palabras:
    Llamando a este código en init(), o init(coder:) métodos se cambiar la interfaz de usuario de aspecto del Objeto, sino que llama en loadView(), o viewDidLoad() de viewController no.

    Si desea configurar el aspecto de la aplicación en su totalidad, application(_:didFinishLaunchingWithOptions:) es un buen lugar para llamar a dicho código.

    Yo prefiero esta sobre la respuesta seleccionada, como se desea utilizar un color diferente para el cursor o la selección de texto y enlaces
    Este es el mejor y hasta la fecha de respuesta.
    Yo tengo uso de un UITextView y escribir el código anterior en el viewdidload. pero cuando voy a escribir un correo electrónico en el campo de texto y escriba el espacio de color no está cambiando.

    OriginalEl autor Grubas

  4. 10

    Usted puede Cambiar los Colores de Hipervínculo en un TextView por el siguiente:

    En el archivo Nib, usted puede ir a la Ventana de Propiedades y cambiar el Matiz de que alguna vez el color que desea.

    o también se puede hacer mediante programación utilizando el código de abajo,

    [YOURTEXTVIEW setTintColor:[UIColor whiteColor]];
    Esto sólo funciona en iOS7+ por lo que necesita para hacer una prueba.

    OriginalEl autor Manju

  5. 4

    El problema con UITextView linkTextAttributes es que se aplica a todos los detecta automáticamente los enlaces. Lo que si desea diferentes enlaces para tener diferentes atributos?

    Resulta que hay un truco: configurar los enlaces como parte de la vista de texto se atribuye texto, y establecer el linkTextAttributes a un diccionario vacío.

    He aquí un ejemplo en iOS 11 /Swift 4:

    //mas is the mutable attributed string we are forming...
    //... and we're going to use as the text view's `attributedText`
    mas.append(NSAttributedString(string: "LINK", attributes: [
        NSAttributedStringKey.link : URL(string: "https://www.apple.com")!,
        NSAttributedStringKey.foregroundColor : UIColor.green,
        NSAttributedStringKey.underlineStyle : NSUnderlineStyle.styleSingle.rawValue
    ]))
    //...
    self.tv.attributedText = mas
    //this is the important thing:
    self.tv.linkTextAttributes = [:]
    Eso es un punto importante para el ajuste de diferentes estilos!
    Mi Cadena es «Quiero aprender de iOS?» Usted debe visitar la mejor fuente de iOS gratuita tutoriales! Swift comprobación de hello google.com Atribuido 9826012345 Cadena de pruebas en adelante…» y de enlace por Defecto atributo es necesario para web de enlace y número de móvil. Pero quiero dejar un enlace para la sección de cuerdas «Quiero aprender de iOS?» en diferentes colores con el link..por Lo mismo.tv.linkTextAttributes = [:] está trabajando sólo para enlace personalizado.
    Voto positivo para the important thing!!

    OriginalEl autor matt

  6. 3

    He encontrado, de hecho, otra forma sin el uso de un webview pero tenga en cuenta que este utiliza API privada y puede ser rechazado en la appstore:

    EDICIÓN: Mi aplicación se ha aprobado por apple, aunque el privado, el uso de la api!

    Primero declarar una categoría en la UITextView con los métodos

    - (id)contentAsHTMLString;
    - (void)setContentToHTMLString:(id)arg1;

    Sólo están haciendo lo siguiente:

    - (id)contentAsHTMLString;
    {
        return [super contentAsHTMLString];
    }
    
    - (void)setContentToHTMLString:(id)arg1;
    {
        [super setContentToHTMLString:arg1];
    }

    Ahora escribir un método para coloridas enlaces:

    - (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];
    }

    Se establece el atributo de estilo con un color específico en todos los tipos de enlaces.

    UITextViews se representan Webiview como a través de divs por lo que podría ir incluso más lejos y color de cada tipo de enlace por separado:

    <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>

    La x-apple-data-detectors-type="link" es el indicador para el tipo exacto del enlace

    EDITAR

    Sobre iOS7esto ya no funciona. En iOS7 usted puede cambiar fácilmente el color del enlace de UITextViews mediante el ajuste del matiz de color. No debe llamar a

    - (id)contentAsHTMLString;

    más, obtendrá una excepción. En lugar de hacer lo siguiente, si usted desea apoyar a iOS 7 y a continuación:

    - (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];
    
    }
    }
    Parece que no puede conseguir que funcione? es textViewCustomText un UITextView? No va a construir para mí. Estoy construyendo en iOs 6
    Usted no tiene que declarar una Categoría en la UITextView con los métodos – véase mi edición

    OriginalEl autor Alexander

  7. 1

    EDICIÓN:
    No lo hagas con UITextView, uso UIWebView lugar.

    Que usted necesita para hacer una hoja de estilos para que. Definir una clase con la combinación de colores que usted necesita-

    .headercopy {
     font-family: "Helvetica";
     font-size: 14px;
     line-height: 18px;
     font-weight:bold;
     color: #25526e;
    }
    a.headercopy:link {
     color:#ffffff;
     text-decoration:none;
    }
    a.headercopy:hover {
     color:#00759B;
     text-decoration:none;
    }
    a.headercopy:visited {
     color:#ffffff;
     text-decoration:none;
    } 
    a.headercopy:hover {
     color:#00759B;
     text-decoration:none;
    }

    ahora el uso de la clase ‘headercopy’ en que página html como este-

    <b>Fax:</b><a href="tel:646.200.7535" class="headercopy"> 646-200-7535</a><br />

    esto mostrará el número de teléfono en el color que usted necesita haga clic con la funcionalidad.

    +2 y -3 por qué Menos? La forma en que es cierto para el análisis sintáctico de HTML en UIWebView.
    el uso de vistas web es un mal estilo de programación de aplicaciones nativas.

    OriginalEl autor Vaibhav Saran

  8. 0

    Este código se establece el color de un número de teléfono en un I-Phone, pero anula la llamada automática de enlace.

    <div><a href="#" x-apple-data-detectors="true" style="color:white;" x-apple-data-detectors-type="link" x-apple-data-detectors-result="0">p&nbsp;&nbsp;0232 963 959</a></div>

    OriginalEl autor Mark Overton

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Recent Articles

Python «set» con duplicados/elementos repetidos

Hay una forma estándar de representar un "conjunto" que puede contener elementos duplicados. Como yo lo entiendo, un conjunto tiene exactamente un cero o...

Python: generador de expresión vs rendimiento

En Python, ¿hay alguna diferencia entre la creación de un generador de objetos a través de un generador de expresión versus el uso de...

Cómo exportar/importar la Masilla lista de sesiones?

Hay una manera de hacer esto? O tengo que tomar manualmente cada archivo de Registro? InformationsquelleAutor s.webbandit | 2012-10-23

no distingue mayúsculas de minúsculas coincidentes en xpath?

Por ejemplo, para el xml a continuación <CATALOG> <CD title="Empire Burlesque"/> <CD title="empire burlesque"/> <CD...