UITextView中的两个超链接有不同的颜色?

时间:2018-04-17 14:05:26

标签: ios objective-c hyperlink uitextview nsattributedstring

我试图让UITextView在文本中有两个链接,但颜色不同。我不确定它是否可能。

我已将UITextView设置为检测链接,不可编辑,但只能选择。

到目前为止我所做的是以下内容:

NSMutableAttributedString *termsAndConditionsTitle = [[NSMutableAttributedString alloc] initWithString:@"I have read the " attributes:@{NSLinkAttributeName: @"https://apple.com", NSForegroundColorAttributeName: [UIColor greenColor]}];
NSMutableAttributedString *someString2 = [[NSMutableAttributedString alloc] initWithString:@"terms and conditions" attributes:@{NSLinkAttributeName: @"https://microsoft.com", NSForegroundColorAttributeName: [UIColor redColor]}];
[termsAndConditionsTitle appendAttributedString:someString2];
[self.termsAndConditionsView setAttributedText:termsAndConditionsTitle];

但最后链接只有UITextView的色调。是否有可能使两个链接有不同的颜色?提前谢谢!

P.S。如果可能,我不想使用库/框架。

2 个答案:

答案 0 :(得分:0)

您需要指定文本视图的linkTextAttributes - 基本上您只需告诉您的文字视图以识别链接并对其进行样式化,但是您指定:

目标C

textView.linkTextAttributes = @{
    NSForegroundColorAttributeName:[UIColor someColor],
    NSUnderlineStyleAttributeName:@(NSUnderlineStyleSingle)
};

您还应该能够分配tintColor(因为UITextView继承与UIView相同的行为,并将此颜色用于链接)。 如果在您的情况下由于某种原因无效,则分配链接属性将是解决方案。

如果您的目的是为每个链接提供两种不同的颜色,那么您必须根据字符串中每个链接的范围手动分配每个链接的属性。

答案 1 :(得分:0)

是的,问题可能是TextView具有链接的一些预定义属性。

要修复此问题,只需删除它们即可。

yourTextView.linkTextAttributes = [:]

就像这样,一旦textview检测到任何链接,它将不会对其应用任何特殊属性。

完成此操作后,它可以正常工作,但不会更改链接的颜色,添加属性时必须手动进行操作。