如何使用ranged属性创建不可变的NSAttributedString

时间:2015-10-14 02:46:11

标签: ios objective-c nsattributedstring nsrange

如何使用范围属性初始化NSAttributedString

按照目前的情况,我只能弄清楚如何在初始化后添加一个ranged属性,这显然不适用于不可变的NSAttributedString个实例。

如果我有NSMutableAttributedString,我可以致电:

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

如果我有NSAttributedString,我可以构建它:

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

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

谢谢,

2 个答案:

答案 0 :(得分:5)

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

所以现在做你需要做的事。

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

答案 1 :(得分:0)

试试这行代码。

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其他说明