ios nsmutableattributedstring

ios - Configuración de color de fuente NSLinkAttributeName



nsattributedstring (8)

Siento que me estoy perdiendo algo fácil pero parece que no puedo descubrir cómo hacer esto:

Establecí el atributo en un enlace así:

[myAttrString addAttribute:NSLinkAttributeName value:linkURL range:selectedRange];

Eso funciona, pero el enlace es azul y parece que no puedo cambiar el color. Esto establece todo excepto el enlace a blanco:

[myAttrString addAttribute:NSForegroundColorAttributeName value:[UIColor whiteColor] range:selectedRange];

¿Hay otro nombre de atributo de color que no puedo encontrar que sea específico de los enlaces?


Explicación:

Esto es sorprendentemente fácil, los componentes de texto que admiten la detección de enlaces tienen una propiedad llamada linkTextAttributes .

Esta propiedad almacena el estilo para que el enlace a partir del componente pueda aplicarlo cuando detecte un nuevo enlace.

En resumen, se aplicará su estilo y luego el estilo almacenado en esta propiedad (en este orden), anulando con éxito su estilo deseado.

Solución:

Establezca esta propiedad en vacío ( linkTextAttributes = [:] ) y tome el control total de sus estilos de enlace.

CONSEJO: se puede usar para crear elementos UITextView en su UITextView que se comporta como un botón . Creando un efecto realmente agradable 🙃


  1. Use un UITextView
  2. Configure el UITextView del UITextView de la linkTextAttributes manera:

    textView.linkTextAttributes = @{NSForegroundColorAttributeName:[UIColor whiteColor]};


De hecho, terminé usando TTTAttributedLabel para mi etiqueta y luego pude hacer lo siguiente que funcionó perfectamente:

NSDictionary *linkAttributes = @{(id)kCTForegroundColorAttributeName: [UIColor whiteColor], (id)kCTUnderlineStyleAttributeName: [NSNumber numberWithInt:kCTUnderlineStyleSingle] }; self.lblDescription.linkAttributes = linkAttributes;


Esto funciona para mí:

txtLabel.linkAttributes = @{}; NSMutableAttributedString * string = [[NSMutableAttributedString alloc] initWithString:expression]; { [string addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:result.range]; [string addAttribute:NSLinkAttributeName value:@"link" range:result.range]; }


Para Swift 3

var aURL = "Http:// Your URL" var description = "Click Me:" let attributedString = NSMutableAttributedString(string: description + aURL) /// Deal with link color let foundURLRange = attributedString.mutableString.range(of: aURL) attributedString.addAttribute(NSLinkAttributeName, value: aURL, range: foundURLRange) textview.linkTextAttributes = [NSForegroundColorAttributeName: UIColor.yellow] /// Deal with description color let foundDescriptionRange = attributedString.mutableString.range(of: description) attributedString.addAttribute(NSForegroundColorAttributeName, value: UIColor.red, range: foundDescriptionRange) textview.attributedText = attributedString


Para swift (para referencia para otros):

// Color the links var linkAttributes: NSMutableDictionary = NSMutableDictionary() linkAttributes.setValue(self.appDelegate.variables.color320, forKey: NSForegroundColorAttributeName) myTextView.linkTextAttributes = linkAttributes as [NSObject : AnyObject]


Si usa TTTAttributedLabel, la respuesta de Oren funciona. Pero debe prestar atención a la advertencia de linkAttributes en la anotación.

/ **
Un diccionario que contiene los atributos NSAttributedString predeterminados que se aplicarán a los enlaces detectados o agregados manualmente al texto de la etiqueta. El estilo de enlace predeterminado es azul y subrayado.

@warning Debe especificar los linkAttributes antes de configurar la detección automática o la adición manual de enlaces para que se apliquen estos atributos.
* /

@property (nonatomic, strong) NSDictionary * linkAttributes;


txtLabel.linkAttributes = @{};

Este es el correcto, llame a esta línea antes de establecer cualquier otro atributo