Ho dedicato molto tempo a cercare di fare lo stesso. La soluzione migliore è quella di sostituire i valori Unicode per le emoji nella tua NSString ad es. \ uE100 ecc. con una stringa segnaposto. È possibile sostituire le codifiche di emoji con un tag HTML e utilizzare UIWenViews o DTCoreText per disegnare l'immagine in linea. ho fatto questo, funziona troppo, ma sarà un po 'lento
Ecco un piccolo antipasto (specialmente se si desidera visualizzare questa etichetta in vista tabella.):
Fai un dizionario con UIImages come oggetti e stringhe segnaposto come chiavi:
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]];
}];
È possibile a questo punto del carico questo HTML in un UIWebView e si avrà ciò che si desidera.
[myWebView loadData:_htmlData MIMEType:@"text/html" textEncodingName:@"utf-8" baseURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]]];//do create the webview first
Se la bassa velocità di UIWebView è un problema, è possibile leggere in anticipo. In entrambi i casi, guarda la nota verso la fine di questa risposta.
Per creare una DTAttributedLabel, facciamo la seguente: Per prima cosa costruire un NSattributedString utilizzando il DTHTMLAttributedStringBuilder:
NSAttributedString *temp = [[[DTHTMLAttributedStringBuilder alloc] initWithHTML:text1
options:@{
DTDefaultFontFamily: @"Helvetica",
DTDefaultFontSize:@15,};
documentAttributes:nil]
generatedAttributedString];
Quindi è possibile utilizzare un'istanza DTAttributedLabel per visualizzare temperatura.
self.tempLabel.attributedString = temp;//create a DTAttributedLabel Instance called tempLabel before this, I had it as a property
Il mio obiettivo era di generare dell'etichetta testo veramente veloce (Tabella Viste) sostenendo emoticon personalizzate. I DTAttribuiti sono veloci (molto più veloci di un UIWebView) NOTA: Ho anche creato un carattere personalizzato in cui avevo mappato i valori unicode per gli emoji a un glifo personalizzato. Con mia sorpresa, erano ancora visualizzati gli emoji predefiniti. Vorrei affermare qui che ogni volta che iOS (CoreText) incontra un personaggio il cui valore si trova nella sezione Emoji, lo disegna usando il font AppleColorEmoji per impostazione predefinita.La mancanza di documentazione su come il font Emoji di Apple Color sia effettivamente disegnato su iOS, in realtà, mi rende difficile dimostrarlo, ma questa sembra una spiegazione plausibile. Se si rilascia un'emoji dall'app della palette dei caratteri su un file in textEdit, quindi selezionarla e provare a cambiare il carattere, si vede che non succede. Analogamente, se digiti del testo, quindi selezionalo e prova a cambiarlo in Apple Color Emoji, vedrai che non succede. Quando ho decompilato il carattere Emoji di Apple Color, non ho trovato mappature di caratteri o glifi per caratteri testuali (tranne 0-9). In qualche modo, anche se imposti il carattere di un'etichetta come Emoji a colori Apple, il carattere per la parte testuale (non emoji) del testo dell'etichetta è impostato su qualcos'altro.
Gentilmente sentitevi liberi di commentare e condividere le vostre conoscenze poiché questa regione intorno al carattere Apple Color Emoji rimane ancora molto poco chiara.
Potrebbe essere questo sarebbe di aiuto - http://stackoverflow.com/questions/1225514/making-an-emoji-enabeling-app – Sagar