iOS / AttributedString:如何用图像覆盖单词?

时间:2015-04-16 04:56:16

标签: ios nsattributedstring emoticons spanned

我一直在努力解决这个问题。用户需要在TextView中输入文本和/或表情符号。我有一个带有我自己图像的表情符号键盘来输入表情符号。问题是我需要在文本中保留一个符号(例如“(微笑)”,同时在同一时间显示符号顶部的表情图片。

因此,当TextView.text属性返回“Hello(smile)”时,用户会看到“Hello [the picture]”。

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

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

2 个答案:

答案 0 :(得分: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;
    }

答案 1 :(得分:0)

由于未能找到更优雅的解决方案,我使用了一个包含表情符号图片的attributesstring,以及一个用于保存表情符号代码的常规字符串。所以我的attString就是例如#34;你好[微笑图片]"而我的字符串是"你好%101%"。如果您有兴趣像我一样构建聊天应用程序,这里是伪代码:

在表情符号键盘中:

{

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

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

}

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

{

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

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

}

注意:还会为常规键盘条目调用shouldChangeTextInRange,包括删除。