Poświęciłem dużo czasu, próbując zrobić to samo. Najlepiej jest zastąpić wartości Unicode dla emoji w NSString np. \ uE100 itp. z łańcuchem zastępczym. Możesz zastąpić kodowanie emoji znacznikiem HTML i użyć albo UIWenViews albo DTCoreText, aby narysować obraz w linii. Zrobiłem to, że działa zbyt, ale to będzie trochę powolny
Oto mały rozrusznik (szczególnie jeśli chcesz wyświetlić tę etykietę w widokach tabeli.):
Zrób słownik z UIImages jako obiektów i ciągów zastępczych jak klucze:
self.emoticonDict = [[NSMutableDictionary alloc] initWithObjectsAndKeys:@"happyEmoticon.png", @":)",
@"sadEmoticon.png", @":(",
@"testImg.png", @"\uE100",
nil];
__block NSString *text1 = [NSString stringWithFormat:@"<html><p>%@</p></html>",text];
[self.emoticonDict enumerateKeysAndObjectsUsingBlock: ^(id key, id obj, BOOL *stop) {
text1 = [text1 stringByReplacingOccurrencesOfString:key withString:[NSString stringWithFormat:@"<img height= 15 width= 15 src=\"%@\">",obj]];
}];
można w tym punkcie obciążenia to HTML do UIWebView i będziesz miał co chcesz.
[myWebView loadData:_htmlData MIMEType:@"text/html" textEncodingName:@"utf-8" baseURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]]];//do create the webview first
Jeśli powolna prędkość UIWebView jest problemem, możesz przeczytać z wyprzedzeniem. W obu przypadkach spójrz na notatkę pod koniec tej odpowiedzi.
Aby utworzyć DTAttributedLabel, mamy następujące: Najpierw budujemy NSattributedString Używanie DTHTMLAttributedStringBuilder:
NSAttributedString *temp = [[[DTHTMLAttributedStringBuilder alloc] initWithHTML:text1
options:@{
DTDefaultFontFamily: @"Helvetica",
DTDefaultFontSize:@15,};
documentAttributes:nil]
generatedAttributedString];
Następnie można użyć instancji DTAttributedLabel wyświetlanie temp.
self.tempLabel.attributedString = temp;//create a DTAttributedLabel Instance called tempLabel before this, I had it as a property
Moim celem było, aby wygenerować tekst etykiety jest bardzo szybki (Tabela wyświetleń) przy jednoczesnym wspieraniu niestandardowe emotikony. Etykiety DTAttributedLabels są szybkie (znacznie szybsze niż UIWebView). UWAGA: Utworzyłem także niestandardową czcionkę, w której zmapowałem wartości Unicode dla emotikonów do niestandardowego glifu. Ku mojemu zdziwieniu, wciąż wyświetlały się domyślne emoji. Chciałbym tutaj powiedzieć, że za każdym razem, gdy iOS (CoreText) napotyka postać, której wartość znajduje się w sekcji Emoji, rysuje ją domyślnie za pomocą czcionki AppleColorEmoji.Brak dokumentacji dotyczącej faktycznego rysowania czcionek Emotikon Apple Colour w systemie iOS sprawia, że trudno jest to udowodnić, ale wydaje się, że jest to wiarygodne wytłumaczenie. Po zrzuceniu emotikonu z aplikacji palety znaków do pliku w pliku tekstowym, a następnie zaznacz go i spróbuj zmienić czcionkę, zobaczysz, że tak się nie dzieje. Podobnie, jeśli wpiszesz jakiś tekst, a następnie wybierzesz go i spróbujesz zmienić jego czcionkę na emoji Apple Colour, zobaczysz, że tak się nie dzieje. Kiedy dekompilowałem czcionkę Emoji Apple Colour, nie znalazłem odwzorowań ani znaków glifów dla znaków tekstowych (oprócz 0-9). W jakiś sposób, nawet jeśli ustawisz czcionkę etykiety jako emoji Apple Colour, czcionka dla tekstowej (nie emoji) części tekstu etykiety zostanie ustawiona na coś innego.
Prosimy o komentowanie i dzielenie się wiedzą, ponieważ ten region wokół czcionki Emoji Apple Color nadal pozostaje bardzo niejasny.
Może to ci pomóc - http://stackoverflow.com/questions/1225514/making-an-emoji-enabeling-app – Sagar