Я посвятил много времени попыткам сделать то же самое.Лучше всего заменить значения Unicode для смайликов в строке NSString, например.\ uE100 и т. д. со строкой-заполнителем.Вы можете заменить кодировки смайликов HTML-тегом и использовать UIWenViews или DTCoreText для рисования изображения в строке.Я сделал это, он тоже работает, но он будет немного медленным (особенно если вы хотите отобразить эту метку в табличных представлениях.)
Вот небольшой стартер:
Сделатьсловарь с UIImages в качестве объектов и строки-заполнители в качестве ключей:
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]];
}];
В этот момент вы можете загрузить этот HTML-код в UIWebView, и у вас будет то, что вы хотите.
[myWebView loadData:_htmlData MIMEType:@"text/html" textEncodingName:@"utf-8" baseURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]]];//do create the webview first
ЕслиМедленная скорость UIWebView - это проблема, которую вы можете прочитать заранее.В любом случае посмотрите на примечание в конце этого ответа.
Чтобы создать DTAttributedLabel, мы делаем следующее: Сначала мы создаем NSattributedString, используя DTHTMLAttributedStringBuilder:
NSAttributedString *temp = [[[DTHTMLAttributedStringBuilder alloc] initWithHTML:text1
options:@{
DTDefaultFontFamily: @"Helvetica",
DTDefaultFontSize:@15,};
documentAttributes:nil]
generatedAttributedString];
ЗатемВы можете использовать экземпляр DTAttributedLabel для отображения температуры.
self.tempLabel.attributedString = temp;//create a DTAttributedLabel Instance called tempLabel before this, I had it as a property
Моя цель состояла в том, чтобы очень быстро сгенерировать текстовую метку (табличные представления) при поддержке пользовательских смайликов.DTAttributedLabels работают быстро (намного быстрее, чем UIWebView). ПРИМЕЧАНИЕ. Я также создал собственный шрифт, в котором я сопоставил значения юникода для смайликов с пользовательским глифом.К моему удивлению, все еще отображались смайлики по умолчанию.Здесь я хотел бы заявить, что всякий раз, когда iOS (CoreText) встречает персонажа, значение которого находится в разделе Emoji, он рисует его с помощью шрифта AppleColorEmoji по умолчанию.Отсутствие документации о том, как на самом деле нарисован шрифт Apple Color Emoji на iOS, затрудняет мне это доказать, но это, кажется, правдоподобное объяснение.Если вы поместите эмодзи из приложения палитры символов в файл в textEdit, затем выберите его и попытаетесь изменить шрифт, вы увидите, что этого не происходит.Точно так же, если вы наберете какой-то текст, затем выделите его и попытаетесь изменить его шрифт на Apple Color Emoji, вы увидите, что этого не происходит.Когда я декомпилировал шрифт Apple Color Emoji, я не нашел сопоставления символов или глифов для текстовых символов (кроме 0-9).Так или иначе, даже если вы установите шрифт ярлыка Apple Color Emoji, шрифт для текстовой (не эмодзи) части текста вашего ярлыка будет установлен на что-то другое.
Пожалуйста, не стесняйтесь комментировать и делиться своими знаниямипоскольку этот регион вокруг шрифта Apple Color Emoji по-прежнему остается очень неясным.