Tôi đã dành rất nhiều thời gian để cố gắng làm tương tự. Đặt cược tốt nhất của bạn là thay thế các giá trị unicode cho biểu tượng cảm xúc trong ví dụ NSString của bạn. \ uE100 v.v. với chuỗi giữ chỗ. Bạn có thể thay thế mã hóa biểu tượng cảm xúc bằng Thẻ HTML và sử dụng UIWenViews hoặc DTCoreText để vẽ hình ảnh nội tuyến. Tôi đã làm điều này, nó hoạt động quá, nhưng nó sẽ là một chút chậm
Đây là một khởi đầu nhỏ (đặc biệt nếu bạn muốn hiển thị Label này trong quan điểm bảng.):
Tạo một từ điển với UIImages làm đối tượng và chuỗi giữ chỗ làm khóa:
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]];
}];
Bạn có thể tải HTML này vào UIWebView và bạn sẽ có những gì bạn muốn.
[myWebView loadData:_htmlData MIMEType:@"text/html" textEncodingName:@"utf-8" baseURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]]];//do create the webview first
Nếu tốc độ chậm của UIWebView là mối quan ngại, bạn có thể đọc tiếp. Trong cả hai trường hợp, hãy xem ghi chú ở cuối câu trả lời này.
Để tạo một DTAttributedLabel, chúng ta thực hiện như sau: Đầu tiên chúng ta xây dựng một NSattributedString sử dụng DTHTMLAttributedStringBuilder:
NSAttributedString *temp = [[[DTHTMLAttributedStringBuilder alloc] initWithHTML:text1
options:@{
DTDefaultFontFamily: @"Helvetica",
DTDefaultFontSize:@15,};
documentAttributes:nil]
generatedAttributedString];
Sau đó, bạn có thể sử dụng một trường hợp DTAttributedLabel để hiển thị temp.
self.tempLabel.attributedString = temp;//create a DTAttributedLabel Instance called tempLabel before this, I had it as a property
Mục tiêu của tôi là tạo nhãn văn bản thật nhanh (Bảng lượt xem) trong khi hỗ trợ biểu tượng cảm xúc tùy chỉnh. DTAttributedLabels nhanh (nhanh hơn nhiều so với UIWebView) LƯU Ý: Tôi cũng đã tạo phông chữ tùy chỉnh nơi tôi đã ánh xạ các giá trị unicode cho biểu tượng cảm xúc thành hình tượng tùy chỉnh. Trước sự ngạc nhiên của tôi, các biểu tượng cảm xúc mặc định được hiển thị. Tôi muốn tuyên bố ở đây rằng bất cứ khi nào iOS (CoreText) đi qua một nhân vật có giá trị nằm trong phần Emoji, nó vẽ nó bằng cách sử dụng phông AppleColorEmoji theo mặc định.Việc thiếu tài liệu về cách thức Apple Color Emoji font thực sự được vẽ trên iOS thực sự làm cho nó khó khăn cho tôi để chứng minh điều này, nhưng điều này có vẻ là một lời giải thích hợp lý. Nếu bạn thả biểu tượng cảm xúc từ ứng dụng bảng ký tự vào một tệp trong văn bảnChỉnh sửa, sau đó chọn nó và cố gắng thay đổi phông chữ, bạn sẽ thấy nó không xảy ra. Tương tự, nếu bạn gõ một số văn bản, sau đó chọn nó và cố gắng thay đổi phông chữ của nó thành Apple Color Emoji, bạn sẽ thấy nó không xảy ra. Khi tôi giải mã phông chữ Apple Color Emoji, tôi không tìm thấy các ánh xạ ký tự hoặc ký tự đại diện cho các ký tự văn bản (trừ 0-9). Bằng cách nào đó, ngay cả khi bạn đặt phông chữ của nhãn là Apple Color Emoji, phông chữ cho phần văn bản (không phải biểu tượng cảm xúc) của văn bản nhãn của bạn được đặt thành văn bản khác.
Vui lòng bình luận và chia sẻ kiến thức của bạn vì vùng này xung quanh phông chữ Biểu tượng cảm xúc màu Apple vẫn còn rất không rõ ràng.
Có thể điều này sẽ giúp bạn - http://stackoverflow.com/questions/1225514/making-an-emoji-enabeling-app – Sagar