Моя цель — сохранить информацию для строки с атрибутами в Parse.com. Я решил придумать кодировку атрибутированного текста для моих изображений, которая работает, заменяя любую строку {X}
в фигурных скобках соответствующим изображением. Например:
Picture of 2 colorless mana: {X}
Должна создавать строку с атрибутами, в которой {X}
заменяется изображением. Это то, что я пробовал:
NSString *formattedText = @"This will cost {2}{PW}{PW} to cast.";
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"(?<=\\{)[^}]+(?=\\})" options:NSRegularExpressionAnchorsMatchLines
error:nil];
NSArray *matches = [regex matchesInString:formattedText
options:kNilOptions
range:NSMakeRange(0, formattedText.length)];
NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:formattedText];
for (NSTextCheckingResult *result in matches)
{
NSString *match = [formattedText substringWithRange:result.range];
NSTextAttachment *imageAttachment = [NSTextAttachment new];
imageAttachment.image = [UIImage imageNamed:[NSString stringWithFormat:@"Mana%@.png", match]];
NSAttributedString *replacementForTemplate = [NSAttributedString attributedStringWithAttachment:imageAttachment];
[attributedString replaceCharactersInRange:result.range
withAttributedString:replacementForTemplate];
}
[_textView setAttributedText:attributedString];
В настоящее время у этого подхода есть две проблемы:
- Фигурные скобки не заменяются, только текст внутри них.
- Диапазон для каждого совпадения меняется, потому что меняется сама строка, и она становится больше с каждой заменой, исходный текст которой имеет длину > 1. Вот как это выглядит: