3

나는 텍스트와 함께 이미지 (이모티콘)를 보내야하는 채팅 응용 프로그램이 있습니다. 이제
, 지금
UIImage를 포함하는 NSAttributedString의 사용자 지정 텍스트 등가물을 얻는 방법?

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; 

(코드 아래) NSTextAttatchment를 통해 이미지를 추가 할 수 있습니다, 내가 원하는 _txtChat.text를 호출 할 때 반환하도록 사용자 정의 텍스트가 미소 아이콘 ":) '라고 attatch하는 것입니다 :) UIImage 대신. 따라서 사용자가 Hii <Smilie>을 보는 경우 "Hii :)"이 표시됩니다. 나는 그것이 가능할지를 짐작할 수 없다.

+0

은 이모티콘 글꼴을 추가


우리가 다음을 수행, 검색 할 수 있습니다. –

+0

@OnikIV 내 대답보기 – user3588621

답변

3

직접 해결책을 얻었습니다. 다음을 수행해야합니다. -
1. 내용을 검색하려면 UITextView (customText)에 메서드 (richText)를 추가해야합니다 (UITextView (RichText) (텍스트가 이미 있으므로 richtext를 권장합니다). 원하는 텍스트 값을 검색하십시오.
2. 사용자 지정 텍스트를 NSTextAttachment에 저장하십시오. 이 작업은 NSTextAttachment를 customNSTextAttatchment로 서브 클래스 화하고 @property id custom을 추가하여 수행되었습니다.

이제 customNSTextAttachment (내 질문에있는 코드와 유사)를 만든 후에 원하는 NSString을 사용자 지정에 할당 할 수 있습니다.

@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) [email protected]""; 
    } 
    else v=[str substringWithRange:range]; //NO=This is a text block. 
    [final appendString:v]; //Append the value 
}]; 

return final; 

}