我有一个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
我该怎么办?
谢谢,希望我自己解释一下。
答案 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;
}