0

我一直在为此苦苦挣扎。用户需要在 TextView 中输入文本和/或表情符号。我有一个表情符号键盘,上面有我自己的图像来输入表情符号。问题是我需要在文本中为表情符号保留一个符号(例如“(微笑)”,同时在符号顶部显示表情符号图片。

所以用户会看到“Hello [the picture]”,而 TextView.text 属性会返回“Hello (smile)”。

在 Android 上,您可以使用跨区字符串,它允许您用图像覆盖部分文本。因此,在 Android 上,我设法毫无问题地实现了我的目标。

在 iOS 上,我认为 Attributed Strings 是与 Spanned 类似的概念,但到目前为止,我所能做的只是用图片完全替换表情符号的代码(使用 NSTextAttachment)。有没有一种方法可以实现我的目标,而不必维护一个包含图片的属性字符串和一个包含代码的单独字符串?

4

2 回答 2

0

你可以使用这个方法,希望它对你有用。

- (NSAttributedString*) parseEmoticons:(NSAttributedString*)text {

            text = [text stringByReplacingOccurrencesOfString:@":-)" withString:@""];
            text = [text stringByReplacingOccurrencesOfString:@";P" withString:@""];
            text = [text stringByReplacingOccurrencesOfString:@"B-)" withString:@""];
            text = [text stringByReplacingOccurrencesOfString:@";-P" withString:@""];

            return text;
    }
于 2015-04-16T05:46:22.823 回答
0

由于未能找到更优雅的解决方案,我求助于维护一个包含表情图片的属性字符串,以及一个保存表情代码的常规字符串。所以我的 attString 是例如“Hello [Smiling picture]”,而我的字符串是“Hello %101%”。如果你有兴趣像我一样构建一个聊天应用程序,这里是伪代码:

在表情键盘中:

{

将图片插入到位置 loc 的属性字符串中;

调用 textView shouldChangeTextInRange:(loc,0) replacementText:"%101";

}

在 shouldChangeTextInRange:(loc,length) replacementText:text 的视图控制器中:

{

解析常规字符串以跳过已经存在的表情符号代码以找到与 loc 匹配的位置;

在识别的位置替换常规字符串中的文本(例如 %101%)。

}

注意:shouldChangeTextInRange 也被称为常规键盘条目,包括删除。

于 2015-04-17T04:05:45.720 回答