我的目标是将属性字符串的信息存储在 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时,它的范围会更大。这是它的样子: