用NSTextAttachment替换NSString的出现次数

时间:2014-12-23 09:48:25

标签: ios objective-c nsstring nstextattachment

我有一个UITextView,我想使用NSTextAttachment用特定图像替换一些字符串。我能够将图像附件插入UITextView,我有一种方法,从文本视图的属性文本中返回NSString替换附件{{1} }}:

NSString

现在我需要一个从-(NSString*)getStringFromAttributedString{ __block NSString *str = self.attributedText.string; // Trivial String representation __block NSMutableString *string = [NSMutableString new]; // To store customized text [self.attributedText enumerateAttributesInRange:NSMakeRange(0, self.attributedText.length) options:0 usingBlock:^(NSDictionary *attributes, NSRange range, BOOL *stop){ // enumerate through the attributes NSString *v; NSObject *x = [attributes valueForKey:@"NSAttachment"]; if(x){ // YES= This is an attachment v = [Fuctions getObjectTag:x]; if(v == nil){ v=@""; } }else{ v = [str substringWithRange:range]; // NO=This is a text block. } // append value to string [string appendString:v]; }]; return string; } 返回NSAttributedString的方法,用图片附件替换一些字符串,就像这样,但是我无法使它工作。

NSString

我该怎么办?

谢谢,希望我自己解释一下。

1 个答案:

答案 0 :(得分:1)

这是我的工作解决方案:

-(NSMutableAttributedString*)getEmoticonStringFromString:(NSString*)string{

NSMutableAttributedString *final = [NSMutableAttributedString new]; //To store customized text
NSInteger len = [string length];
unichar buffer[len];
[string getCharacters:buffer range:NSMakeRange(0, len)];

for(int i = 1; i < len; i++) {
    if(buffer[i-1] == ':' && buffer[i] == 'D'){

        NSMutableAttributedString *attrString = [[NSMutableAttributedString alloc] initWithString:string];

        NSTextAttachment *textAttachment = [[NSTextAttachment alloc] init];
        textAttachment.image = [Functions scaleImage:[UIImage imageNamed:@"myImageName"] toSize:CGSizeMake(18.0f, 18.0f)];
        textAttachment.bounds = (CGRect) {0, -2, textAttachment.image.size};

        NSMutableAttributedString *attrStringWithImage = [[NSAttributedString attributedStringWithAttachment:textAttachment] mutableCopy];

        NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init] ;
        [paragraphStyle setAlignment:NSTextAlignmentLeft];
        [paragraphStyle setLineSpacing:2.0f];
        [attrString addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, [attrString length])];

        [final insertAttributedString:attrStringWithImage atIndex:final.length];

        i++;
    }else{

        [final insertAttributedString:[[NSAttributedString alloc] initWithString:[NSString stringWithFormat:@"%c", buffer[i-1]]] atIndex:final.length];
        if(i == len-1){

            [final insertAttributedString:[[NSAttributedString alloc] initWithString:[NSString stringWithFormat:@"%c", buffer[i]]] atIndex:final.length];
        }
    }
}
return final;

}