Я посвятил много времени попыткам сделать то же самое. Лучше всего заменить значения Unicode для смайликов в вашем NSString, например. и т. д. со строкой-заполнителем. Вы можете заменить кодировку эмодзи тегом 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 для отображения temp.
self.tempLabel.attributedString = temp;//create a DTAttributedLabel Instance called tempLabel before this, I had it as a property
Моя цель состояла в том, чтобы очень быстро генерировать текстовые метки (табличные представления) с поддержкой пользовательских смайликов. DTAttributedLabels работает быстро (намного быстрее, чем UIWebView). ПРИМЕЧАНИЕ. Я также создал собственный шрифт, в котором я сопоставил значения Unicode для смайликов с пользовательским глифом. К моему удивлению, по-прежнему отображались смайлики по умолчанию. Здесь я хотел бы заявить, что всякий раз, когда iOS (CoreText) встречает символ, значение которого находится в разделе Emoji, он по умолчанию рисует его с использованием шрифта AppleColorEmoji. Отсутствие документации о том, как шрифт Apple Color Emoji на самом деле рисуется на iOS, на самом деле мешает мне доказать это, но это кажется правдоподобным объяснением. Если вы перетащите эмодзи из приложения палитры символов в файл в textEdit, затем выберете его и попытаетесь изменить шрифт, вы увидите, что этого не происходит. Точно так же, если вы наберете текст, затем выберете его и попытаетесь изменить его шрифт на Apple Color Emoji, вы увидите, что этого не происходит. Когда я декомпилировал шрифт Apple Color Emoji, я не нашел сопоставления символов или глифов для текстовых символов (кроме 0-9). Каким-то образом, даже если вы установите шрифт метки как Apple Color Emoji, шрифт для текстовой (не смайликов) части текста вашей метки будет установлен на что-то другое.
Пожалуйста, не стесняйтесь комментировать и делиться своими знаниями, поскольку эта область вокруг шрифта Apple Color Emoji все еще остается очень неясной.
person
JohnVanDijk
schedule
18.06.2013