无法在 TTTAttributedLabel 上设置 linkAttributes
Can't set linkAttributes on TTTAttributedLabel
使用 TTTAttributedLabel,我的代码:
NSString *contentText = @"some text here foo bar";
[self.content setText:contentText afterInheritingLabelAttributesAndConfiguringWithBlock:^NSMutableAttributedString *(NSMutableAttributedString *mutableAttributedString) {
return mutableAttributedString;
}];
self.content.linkAttributes = @{ NSForegroundColorAttributeName: [UIColor redColor],
NSUnderlineStyleAttributeName: [NSNumber numberWithInt:NSUnderlineStyleSingle] };
NSRange range = [self.content.text rangeOfString:@"foo bar"];
[self.content addLinkToURL:[NSURL URLWithString:@"action://load-foo"] withRange:range];
[self.content setNeedsDisplay];
就点击范围文本和执行操作而言,一切正常,但是,唯一似乎不起作用的是文本颜色。我对库使用 NSForegroundColorAttributeName
正确吗?
编辑:
天哪,"doesn't work",带下划线的文本是灰色的,而不是像我上面设置的那样是红色的。
我以前也遇到过同样的问题,折腾了好久也没找到原因,所以放弃你说的方案,想出以下方法:
NSString *contentText = @"some text here foo bar";
NSString* matchString = @"foo bar";
NSRegularExpression *mentionExpression = [NSRegularExpression regularExpressionWithPattern:matchString options:NO error:nil];
NSArray *matches = [mentionExpression matchesInString:contentText
options:0
range:NSMakeRange(0, [contentText length])];
for (NSTextCheckingResult *match in matches) {
NSRange matchRange = [match rangeAtIndex:0];
NSString *mentionString = [contentText substringWithRange:matchRange];
NSArray *keys = @[(id) kCTForegroundColorAttributeName, (id) kCTUnderlineStyleAttributeName
];
NSArray *objects = @[[UIColor redColor], @(kCTUnderlineStyleNone)];
NSDictionary *linkAttributes = @{keys : objects};
[self.yourlabel addLinkWithTextCheckingResult:match attributes:linkAttributes];
}
self.yourlabel.delegate = self;
//Then overwrite the delegate method for the link click actions
- (void)attributedLabel:(TTTAttributedLabel *)label didSelectLinkWithTextCheckingResult:(NSTextCheckingResult *)result {
//do whatever you need
}
此解决方案的优点是您可以根据需要添加任意数量的自定义 link 样式。
当然,如果您坚持使用 addLinkToURL
,另一种可能的解决方案是更改 TTTAttributedLabel
源代码以更改默认 link 颜色。
使用 TTTAttributedLabel,我的代码:
NSString *contentText = @"some text here foo bar";
[self.content setText:contentText afterInheritingLabelAttributesAndConfiguringWithBlock:^NSMutableAttributedString *(NSMutableAttributedString *mutableAttributedString) {
return mutableAttributedString;
}];
self.content.linkAttributes = @{ NSForegroundColorAttributeName: [UIColor redColor],
NSUnderlineStyleAttributeName: [NSNumber numberWithInt:NSUnderlineStyleSingle] };
NSRange range = [self.content.text rangeOfString:@"foo bar"];
[self.content addLinkToURL:[NSURL URLWithString:@"action://load-foo"] withRange:range];
[self.content setNeedsDisplay];
就点击范围文本和执行操作而言,一切正常,但是,唯一似乎不起作用的是文本颜色。我对库使用 NSForegroundColorAttributeName
正确吗?
编辑:
天哪,"doesn't work",带下划线的文本是灰色的,而不是像我上面设置的那样是红色的。
我以前也遇到过同样的问题,折腾了好久也没找到原因,所以放弃你说的方案,想出以下方法:
NSString *contentText = @"some text here foo bar";
NSString* matchString = @"foo bar";
NSRegularExpression *mentionExpression = [NSRegularExpression regularExpressionWithPattern:matchString options:NO error:nil];
NSArray *matches = [mentionExpression matchesInString:contentText
options:0
range:NSMakeRange(0, [contentText length])];
for (NSTextCheckingResult *match in matches) {
NSRange matchRange = [match rangeAtIndex:0];
NSString *mentionString = [contentText substringWithRange:matchRange];
NSArray *keys = @[(id) kCTForegroundColorAttributeName, (id) kCTUnderlineStyleAttributeName
];
NSArray *objects = @[[UIColor redColor], @(kCTUnderlineStyleNone)];
NSDictionary *linkAttributes = @{keys : objects};
[self.yourlabel addLinkWithTextCheckingResult:match attributes:linkAttributes];
}
self.yourlabel.delegate = self;
//Then overwrite the delegate method for the link click actions
- (void)attributedLabel:(TTTAttributedLabel *)label didSelectLinkWithTextCheckingResult:(NSTextCheckingResult *)result {
//do whatever you need
}
此解决方案的优点是您可以根据需要添加任意数量的自定义 link 样式。
当然,如果您坚持使用 addLinkToURL
,另一种可能的解决方案是更改 TTTAttributedLabel
源代码以更改默认 link 颜色。