Objective- C: эквивалентно stringWithFormat для NSMutableAttributedString - PullRequest
0 голосов
/ 06 февраля 2020

Я пытаюсь добавить гиперссылку в строку. У меня есть локализованная строка, и я ставлю% @ для форматирования моей строки. Когда я добавляю приписанную строку в мою строку, приписанный формат дает необработанный результат, равный NSLink = "https://www.example.com". Я не смог найти атрибутивный форматировщик строки так же, как форматировщик строки. Как мне добиться такого же поведения в моем случае?

Код:

NSMutableAttributedString * str = [[NSMutableAttributedString alloc] initWithString:@"Example"];
[str addAttribute: NSLinkAttributeName value: @"https:/www.example.com" range: NSMakeRange(0, str.length)];
NSMutableAttributedString *originalStr = [[NSMutableAttributedString alloc] initWithString: self.pageDescriptions[3].localized];
pageContentViewController.messageText = [NSString stringWithFormat:self.pageDescriptions[index].localized, str];

Ответы [ 2 ]

0 голосов
/ 10 февраля 2020

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: заменит среднее вхождение.

0 голосов
/ 10 февраля 2020

Нет ни одного. Вы создаете NSAttributedString вручную или создаете расширение, которое делает то, что вы хотите, если вы делаете это много.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...