如何创建具有范围属性的不可变 NSAttributedString

How to create an immutable NSAttributedString with a ranged attribute

如何用范围属性初始化 NSAttributedString

就目前而言,我只能弄清楚如何在初始化后添加范围属性,这显然不适用于不可变 NSAttributedString 实例。

如果我有NSMutableAttributedString,我可以打电话:

[str addAttribute:NSLinkAttributeName value:url range:range];

如果我有一个NSAttributedString,我可以构造它:

[[NSAttributedString alloc] initWithString:str attributes:@{NSLinkAttributeName: url}];

但我找不到将范围放入 attributesDict 的方法。

谢谢,

从 NSMutableAttributedString 开始。如果这不是您所拥有的,请通过在 NSAttributedString 上调用 mutableCopy 来制作可变副本。现在你 有一个 NSMutableAttributedString。

所以现在做任何你需要做的事情。

完成后,如果您确实需要 NSAttributedString,请对 NSMutableAttributedString 调用 copy 以获得不可变副本。 (但是很难理解为什么你需要这样做,因为你总是可以在需要 NSAttributedString 的地方传递 NSMutableAttributedString。)

试试这行代码。

NSString *name = @"firstname lastname";
NSAttributedString *username = [[NSAttributedString alloc] initWithString:name];

NSMutableAttributedString *mutableAttributedString = [[NSMutableAttributedString alloc] initWithAttributedString:username];
[mutableAttributedString addAttribute:NSLinkAttributeName value:@"www.yourdomain.com" range:NSMakeRange(0, name.length)];

此外,您可以在您的范围后添加另一行文字

[mutableAttributedString appendAttributedString:[[NSAttributedString alloc] initWithString:@"other description"]];

输出

firstname lastname其他描述