Как получить пользовательский текстовый эквивалент NSAttributedString, содержащий UIImage?

У меня есть приложение чата, где мне нужно отправлять изображения (смайлики) вместе с текстом.
Теперь я могу добавить изображение через NSTextAttatchment (Ниже код)

NSTextAttachment *textAttachment = [[NSTextAttachment alloc] init];
NSString *img=[NSString stringWithFormat:@"%@.png",imgName];
textAttachment.image =[UIImage imageNamed:img];

NSAttributedString *attrStringWithImage = [NSAttributedString attributedStringWithAttachment:textAttachment];
NSMutableAttributedString *nStr=[[NSMutableAttributedString alloc]initWithAttributedString:_txtChat.attributedText];
[nStr appendAttributedString:attrStringWithImage];
_txtChat.attributedText  =nStr;

Теперь, что я хочу, чтобы привязать пользовательский текст сказать ":)на значок улыбки, чтобы при звонке _txtChat.text вернется:) вместо UIImage, Итак, если пользователь видит Hii <Smilie>, Я бы получил "Hii :)", Я не могу понять, возможно ли это получить.

1 ответ

Решение

Получил решение сам. Нам нужно сделать следующее: -
1. Чтобы извлечь содержимое, нам нужно добавить метод (richText) в UITextView(customCategory), скажем, UITextView(RichText) (текст уже есть, поэтому я рекомендую richText), чтобы получить нужные текстовые значения.
2. Сохраните пользовательский текст в NSTextAttachment. Это было сделано путем создания подкласса NSTextAttachment (в customNSTextAttatchment) и добавления пользовательского @property id.

Теперь, после создания customNSTextAttachment (аналогично коду в моем вопросе), мы можем назначить желаемую строку NSString в custom.

Чтобы получить, мы делаем следующее:

@implementation UITextView(RichText)
-(NSString*)richText
{ 
  __block NSString *str=self.attributedText.string; //Trivial String representation
  __block NSMutableString *final=[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=x.custom; // Get Custom value (i.e. the previously stored NSString).
         if(v==nil) v=@"";
     }
     else v=[str substringWithRange:range]; //NO=This is a text block.
     [final appendString:v]; //Append the value
 }];

return final;

}

Другие вопросы по тегам