stringWithFormat:
выполняет только подстановки форматеров. Поэтому, если ваши средства форматирования достаточно просты, например %@
, вы можете просто найти его с помощью rangeOfString:
и выполнить подстановку самостоятельно с помощью replaceCharactersInRange:withAttributedString:
.
NSMutableAttributedString *strWithLink = [[NSMutableAttributedString alloc] initWithString:@"Example"];
[strWithLink addAttribute:NSLinkAttributeName value:@"https:/www.example.com" range:NSMakeRange(0, strWithLink.length)];
NSMutableAttributedString *strWithFormat = [[NSMutableAttributedString alloc] initWithString:@"hello %@ world"];
[strWithFormat replaceCharactersInRange:[strWithFormat.string rangeOfString:@"%@"] withAttributedString:strWithLink];
Результат в strWithFormat
сохранил атрибуты strWithLink
.
Примечание: это не будет работать правильно, если ваш формат сложный, как с %%@ %@ %%@
, потому что он заменит первое вхождение %@
, тогда как stringWithFormat:
заменит среднее вхождение.