如何创建具有范围属性的不可变 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"]];
输出
如何用范围属性初始化 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"]];
输出