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 suUITextView
que se comporta como un botón . Creando un efecto realmente agradable 🙃
- Use un
UITextView
Configure el
UITextView
delUITextView
de lalinkTextAttributes
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 atributosNSAttributedString
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