ios objective-c tttattributedlabel

ios - Enlace de color del grifo para TTTAttributedLabel



objective-c (6)

Deberias hacer algo como esto

NSMutableDictionary *mutableActiveLinkAttributes = [NSMutableDictionary dictionary]; [mutableActiveLinkAttributes setObject:[NSNumber numberWithBool:NO] forKey:(NSString *)kCTUnderlineStyleAttributeName]; [mutableActiveLinkAttributes setObject:[UIColor greenColor] forKey:(NSString *)kCTForegroundColorAttributeName]; label.activeLinkAttributes = [NSDictionary dictionaryWithDictionary:mutableActiveLinkAttributes];

Estoy usando un TTTAttributedLabel en mi proyecto. Me las arreglé para cambiar el color y el subrayado predeterminados de cualquier enlace que cree modificando los atributos del enlace.

NSArray *pKeys = [[NSArray alloc] initWithObjects:(id)kCTForegroundColorAttributeName, (id)kCTUnderlineStyleAttributeName , nil]; NSArray *pObjects = [[NSArray alloc] initWithObjects:pAlertColor,[NSNumber numberWithInt: kCTUnderlineStyleNone], nil]; NSDictionary *pLinkAttributes = [[NSDictionary alloc] initWithObjects:pObjects forKeys:pKeys]; self.alertMessage.linkAttributes = pLinkAttributes; self.alertMessage.activeLinkAttributes = pLinkAttributes;

Sin embargo, me he dado cuenta de que cuando hago clic en el enlace, se vuelve rojo momentáneamente como lo hace cualquier otro enlace cuando se toca. Necesito cambiar este color. ¿Alguna pista de cómo se podría hacer eso?


Le gustará ver la documentación de TTTAttributedLabel , específicamente en activeLinkAttributes

activeLinkAttributes

@property (nonatomic, strong) NSDictionary * activeLinkAttributes Discussion

Un diccionario que contiene los atributos NSAttributedString que se aplicarán a los enlaces cuando están en el estado activo. Si es nulo o un NSDictionary vacío, los enlaces activos no tendrán estilo. El estilo de enlace activo predeterminado es rojo y subrayado.

Declarado en

TTTAttributedLabel.h


Puedes usar un atributo "activeLinkAttributes"

NSMutableDictionary* attributes = [NSMutableDictionary dictionaryWithDictionary:self.attributedLabel.activeLinkAttributes]; [attributes setObject:(__bridge id)[UIColor blueColor].CGColor forKey:(NSString*)kCTForegroundColorAttributeName]; self.attributedLabel.activeLinkAttributes = attributes;


Código completo para establecer TTTAttributedLabel en Objective-C

#import "TTTAttributedLabel.h" @property (weak, nonatomic) IBOutlet TTTAttributedLabel *attributedLable; - (void)viewDidLoad { [super viewDidLoad]; [self setup]; } - (void)setup { _attributedLable.numberOfLines = 0; NSString *strTC = @"Terms and Condition"; NSString *strPP = @"Privacy Policy"; NSString *string = [NSString stringWithFormat:@"By click continue I agree to %@ and %@.",strTC,strPP]; NSMutableParagraphStyle *paragraphStyle = [NSMutableParagraphStyle alloc]; paragraphStyle.lineHeightMultiple = 1.2; NSAttributedString *fullAttributedString = [[NSAttributedString alloc] initWithString:string attributes:@{ NSFontAttributeName : [UIFont fontWithName:IZFontNameLatoRegular size:15.0], NSParagraphStyleAttributeName : paragraphStyle }]; [_attributedLable setTextAlignment:NSTextAlignmentCenter]; [_attributedLable setAttributedText:fullAttributedString]; NSRange rangeTC = [string rangeOfString:strTC]; NSRange rangePP = [string rangeOfString:strPP]; NSDictionary *ppActiveLinkAttributes = @{NSForegroundColorAttributeName : [UIColor blueColor], NSUnderlineStyleAttributeName: @(NSUnderlineStyleNone)}; NSDictionary *ppLinkAttributes = @{NSForegroundColorAttributeName : [UIColor blueColor], NSUnderlineStyleAttributeName: @(NSUnderlineStyleNone)}; _attributedLable.activeLinkAttributes = ppActiveLinkAttributes; _attributedLable.linkAttributes = ppLinkAttributes; NSURL *urlTC = [NSURL URLWithString:@"action://TC"]; NSURL *urlPP = [NSURL URLWithString:@"action://PP"]; [_attributedLable addLinkToURL:urlTC withRange:rangeTC]; [_attributedLable addLinkToURL:urlPP withRange:rangePP]; _attributedLable.textColor = [UIColor blackColor]; _attributedLable.delegate = self; } //Delegate Method - (void)attributedLabel:(TTTAttributedLabel *)label didSelectLinkWithURL:(NSURL *)url { if ([url.absoluteString isEqualToString:@"action://TC"]) { NSLog(@"terms and conditions click"); } else if ([url.absoluteString isEqualToString:@"action://PP"]){ NSLog(@"privacy policy click"); } }

Nota: Instale el archivo Pod: pod ''TTTAttributedLabel''


Para Swift 4:

let activeLinkAttributes = NSMutableDictionary(dictionary: attributedLabel.activeLinkAttributes) activeLinkAttributes[NSAttributedStringKey.foregroundColor] = UIColor.blue attributedLabel.activeLinkAttributes = activeLinkAttributes as NSDictionary as! [AnyHashable: Any]

Para Swift 3:

let activeLinkAttributes = NSMutableDictionary(dictionary: attributedLabel.activeLinkAttributes) activeLinkAttributes[NSForegroundColorAttributeName] = UIColor.blue attributedLabel.activeLinkAttributes = activeLinkAttributes as NSDictionary as! [AnyHashable: Any]


Solución Swift 2:

Específicamente, necesita configurar activeLinkAttributes , vea el siguiente ejemplo:

private func subscriptionNoticeWithDelegate(delegate:TTTAttributedLabelDelegate) -> TTTAttributedLabel { let subscriptionNotice:String = "To turn on all notifications, subscribe to our monthly " + "service ($0.99/month). If you have already subscribed, please restore your purchase." let paragraphStyle = NSMutableParagraphStyle() paragraphStyle.lineHeightMultiple = 1.2 let subscriptionNoticeAttributedString = NSAttributedString(string:subscriptionNotice, attributes: [ NSFontAttributeName: UIFont(name:"HelveticaNeue-Light", size:15)!, NSParagraphStyleAttributeName: paragraphStyle, NSForegroundColorAttributeName: UIColor.grayColor().CGColor, ]) let subscriptionNoticeLinkAttributes = [ NSForegroundColorAttributeName: UIColor.grayColor(), NSUnderlineStyleAttributeName: NSNumber(bool:true), ] let subscriptionNoticeActiveLinkAttributes = [ NSForegroundColorAttributeName: UIColor.grayColor().colorWithAlphaComponent(0.80), NSUnderlineStyleAttributeName: NSNumber(bool:true), ] let subscriptionNoticeLabel:TTTAttributedLabel = TTTAttributedLabel(frame:CGRectZero) subscriptionNoticeLabel.delegate = delegate subscriptionNoticeLabel.numberOfLines = 0 subscriptionNoticeLabel.lineBreakMode = NSLineBreakMode.ByWordWrapping subscriptionNoticeLabel.textInsets = UIEdgeInsets(top:10, left:15, bottom:0, right:15) subscriptionNoticeLabel.setText(subscriptionNoticeAttributedString) subscriptionNoticeLabel.linkAttributes = subscriptionNoticeLinkAttributes subscriptionNoticeLabel.activeLinkAttributes = subscriptionNoticeActiveLinkAttributes let subscribeLinkRange = (subscriptionNotice as NSString).rangeOfString("subscribe") let subscribeURL = NSURL(string:kSubscriptionNoticeSubscribeURL)! subscriptionNoticeLabel.addLinkToURL(subscribeURL, withRange:subscribeLinkRange) let restoreLinkRange = (subscriptionNotice as NSString).rangeOfString("restore") let restoreURL = NSURL(string:kSubscriptionNoticeRestoreURL)! subscriptionNoticeLabel.addLinkToURL(restoreURL, withRange:restoreLinkRange) return subscriptionNoticeLabel }