Один из подходов заключается в использовании UIWebView вместо UILabel. Замените каждый смайлик тегом <img src=...>
, где изображение находится в вашем комплекте. Используйте loadHTMLString для заполнения UIWebView и передачи URL-адреса для [[NSBundle mainBundle] resourcePath]
в качестве baseURL.
Еще один, более сложный подход для ручного размещения изображений над UILabel. Оставьте несколько мест, где смайлик появится. Измерьте текст и поместите UIImageView над UILabel для каждого смайлика.
Вы также можете использовать CoreGraphics для всего текста и макета изображения. Разбейте строки на текст и смайлики. Когда вы рисуете каждую строку, CGContext будет обновлять текстовую позицию, где он будет рисовать дальше. Когда вы дойдете до смайлика, нарисуйте соответствующее изображение и измените положение текста вручную.
Использование UIWebView, вероятно, наименее сложно для кодирования и имеет дополнительный бонус поддержки стилизованного текста. Это также самый ресурсоемкий процесс, если вы не пропустите табличное представление и не сделаете все в одном UIWebView. Вы можете сделать это немного быстрее, используя javascript для загрузки содержимого при повторном использовании ячеек.
Использование CoreGraphics, вероятно, является самым быстрым и наименее ресурсоемким, если скорость становится проблемой.