Link 点击 TTTAttributedLabel 的颜色
Link tap color for TTTAttributedLabel
我在我的项目中使用 TTTAttributedLabel。我已经设法更改了我通过修改 link 属性创建的任何 link 的默认颜色和下划线。
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;
但是,我注意到当我点击 link 时,它会像点击任何其他 link 一样瞬间变成红色。我需要改变这种颜色。关于如何做到这一点的任何线索?
您可以使用属性 "activeLinkAttributes"
NSMutableDictionary* attributes = [NSMutableDictionary dictionaryWithDictionary:self.attributedLabel.activeLinkAttributes];
[attributes setObject:(__bridge id)[UIColor blueColor].CGColor forKey:(NSString*)kCTForegroundColorAttributeName];
self.attributedLabel.activeLinkAttributes = attributes;
您会喜欢查看 TTTAttributedLabel documentation,特别是 activeLinkAttributes
activeLinkAttributes
@property (nonatomic, strong) NSDictionary *activeLinkAttributes
Discussion
A dictionary containing the NSAttributedString attributes to be
applied to links when they are in the active state. If nil or an empty
NSDictionary, active links will not be styled. The default active link
style is red and underlined.
Declared In
TTTAttributedLabel.h
你应该这样做
NSMutableDictionary *mutableActiveLinkAttributes = [NSMutableDictionary dictionary];
[mutableActiveLinkAttributes setObject:[NSNumber numberWithBool:NO] forKey:(NSString *)kCTUnderlineStyleAttributeName];
[mutableActiveLinkAttributes setObject:[UIColor greenColor] forKey:(NSString *)kCTForegroundColorAttributeName];
label.activeLinkAttributes = [NSDictionary dictionaryWithDictionary:mutableActiveLinkAttributes];
Swift2 解:
具体需要设置activeLinkAttributes
,见下例:
private func subscriptionNoticeWithDelegate(delegate:TTTAttributedLabelDelegate) -> TTTAttributedLabel {
let subscriptionNotice:String = "To turn on all notifications, subscribe to our monthly " +
"service ([=10=].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
}
对于Swift 4:
let activeLinkAttributes = NSMutableDictionary(dictionary: attributedLabel.activeLinkAttributes)
activeLinkAttributes[NSAttributedStringKey.foregroundColor] = UIColor.blue
attributedLabel.activeLinkAttributes = activeLinkAttributes as NSDictionary as! [AnyHashable: Any]
对于Swift 3:
let activeLinkAttributes = NSMutableDictionary(dictionary: attributedLabel.activeLinkAttributes)
activeLinkAttributes[NSForegroundColorAttributeName] = UIColor.blue
attributedLabel.activeLinkAttributes = activeLinkAttributes as NSDictionary as! [AnyHashable: Any]
在 Objective-C
中设置 TTTAttributedLabel 的完整代码
#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");
}
}
注意:安装 Pod 文件:pod 'TTTAttributedLabel'
我在我的项目中使用 TTTAttributedLabel。我已经设法更改了我通过修改 link 属性创建的任何 link 的默认颜色和下划线。
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;
但是,我注意到当我点击 link 时,它会像点击任何其他 link 一样瞬间变成红色。我需要改变这种颜色。关于如何做到这一点的任何线索?
您可以使用属性 "activeLinkAttributes"
NSMutableDictionary* attributes = [NSMutableDictionary dictionaryWithDictionary:self.attributedLabel.activeLinkAttributes];
[attributes setObject:(__bridge id)[UIColor blueColor].CGColor forKey:(NSString*)kCTForegroundColorAttributeName];
self.attributedLabel.activeLinkAttributes = attributes;
您会喜欢查看 TTTAttributedLabel documentation,特别是 activeLinkAttributes
activeLinkAttributes
@property (nonatomic, strong) NSDictionary *activeLinkAttributes Discussion
A dictionary containing the NSAttributedString attributes to be applied to links when they are in the active state. If nil or an empty NSDictionary, active links will not be styled. The default active link style is red and underlined.
Declared In
TTTAttributedLabel.h
你应该这样做
NSMutableDictionary *mutableActiveLinkAttributes = [NSMutableDictionary dictionary];
[mutableActiveLinkAttributes setObject:[NSNumber numberWithBool:NO] forKey:(NSString *)kCTUnderlineStyleAttributeName];
[mutableActiveLinkAttributes setObject:[UIColor greenColor] forKey:(NSString *)kCTForegroundColorAttributeName];
label.activeLinkAttributes = [NSDictionary dictionaryWithDictionary:mutableActiveLinkAttributes];
Swift2 解:
具体需要设置activeLinkAttributes
,见下例:
private func subscriptionNoticeWithDelegate(delegate:TTTAttributedLabelDelegate) -> TTTAttributedLabel {
let subscriptionNotice:String = "To turn on all notifications, subscribe to our monthly " +
"service ([=10=].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
}
对于Swift 4:
let activeLinkAttributes = NSMutableDictionary(dictionary: attributedLabel.activeLinkAttributes)
activeLinkAttributes[NSAttributedStringKey.foregroundColor] = UIColor.blue
attributedLabel.activeLinkAttributes = activeLinkAttributes as NSDictionary as! [AnyHashable: Any]
对于Swift 3:
let activeLinkAttributes = NSMutableDictionary(dictionary: attributedLabel.activeLinkAttributes)
activeLinkAttributes[NSForegroundColorAttributeName] = UIColor.blue
attributedLabel.activeLinkAttributes = activeLinkAttributes as NSDictionary as! [AnyHashable: Any]
在 Objective-C
中设置 TTTAttributedLabel 的完整代码#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");
}
}
注意:安装 Pod 文件:pod 'TTTAttributedLabel'