首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将UILabel中的表情符号替换为NSTextAttachment --无法将明文表示设置为用于复制/粘贴的常规表情符号

将UILabel中的表情符号替换为NSTextAttachment --无法将明文表示设置为用于复制/粘贴的常规表情符号
EN

Stack Overflow用户
提问于 2017-06-03 12:19:25
回答 1查看 330关注 0票数 2

我在UILabel/UITextView中用我自己的自定义表情符号替换表情符号。这是很好的工作,但我正在挣扎的是得到原来的表情粘贴。

因此,例如,UILabel可以用自定义的表情符号显示"Hello ",复制然后粘贴文本,或者调用UILabel的text属性会用标准的表情符号显示"Hello“。

我使用一个显示图像的NSTextAttachment子类来实现这一点,并在使用该表情符号时将其添加为NSAttributedString:

代码语言:javascript
复制
class EmojiTextAttachment: NSTextAttachment {
    static let size = CGSize(width: 16, height: 16)

    let emoji: Emoji

    init(emoji: Emoji) {
        self.emoji = emoji

        super.init(data: emoji.rawValue.data(using: .utf8), ofType: "public.text")
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    override func image(forBounds imageBounds: CGRect, textContainer: NSTextContainer?, characterIndex charIndex: Int) -> UIImage? {
        return Emoji.generateConstrainedFaceImage(emoji: emoji, height: imageBounds.size.height)
    }
}

let emoji = Emoji(rawValue: emojiString)!
let emojiTextAttachment = EmojiTextAttachment(emoji: emoji)
emojiTextAttachment.bounds = CGRect(x: 0, y: self.font!.descender, width: self.font!.lineHeight, height: self.font!.lineHeight)    
let attributedString = NSAttributedString(attachment: emojiTextAttachment)

这看起来是正确的,但是现在如果我调用UITextField的UITextField属性,它就不会将NSTextAttachment作为其文本的一部分。此外,复制内容将EmojiTextAttachment复制为数据。在这里,我尝试设置数据:ofType:是一个字符串(转换为数据),但这不起作用,它只是形成了一些数据。通过emojiTextAttachment.image设置图像意味着它会粘贴图像。通过imageForBounds:textContainer:characterIndex:函数设置它意味着图像本身不会被复制/粘贴。

是否有一种方法可以设置NSTextAttachment的明文表示,或者其他一些已知的方法来实现这一工作?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-04 08:07:29

却找不到真正干净的方法。子类NSAttributedString不受支持,因此无法重写string函数。

相反,我使用一个NSAttributedString函数添加了一个plaintextRepresentation扩展,该函数通过属性枚举,用表情符号替换任何EmojiTextAttachments,然后返回属性字符串的string值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44343855

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档