Emojis在UiTextView中

时间:2018-05-14 20:13:01

标签: ios swift string uitextview

我正在为我的应用添加标记。标签文本在发送到正常工作的服务器时看起来像“{{@ 23235}}”。但是,当在消息中主动标记某人时,对于某些表情符号(并非全部),将发生以下情况:

正确添加标签:

enter image description here

但是当我离开(或者真的键入另一个“@”或任何角色)时,它会执行以下操作:

enter image description here

奇怪的是,这只发生在某些表情符号类型上。

我尝试使用以下函数作为我用于String的扩展名来修复它:

var decodeEmoji: String{
    guard let data = self.data(using: String.Encoding.utf8) else {return self}
    let decodedStr = NSString(data: data, encoding: String.Encoding.nonLossyASCII.rawValue)
    if let str = decodedStr{
        return str as String
    }
    return self
}

我在插入的标记值上使用它,但它似乎没有帮助。

public func insertTag(_ tag: Taggable, atRange range: NSRange){
    let currentFullText = NSMutableAttributedString(attributedString: self.attributedText)
    let tagText = tag.visual.decodeEmoji
    let tagRange = NSRange(location: range.location, length: tagText.count)

    self.tags = self.updateTags(self.tags, whenUpdatingText: currentFullText.string, inRange: range, withText: tagText)

    let attributes = self.tagAttributes + [NSAttributedStringKey.link: "\(tag.url)"]
    let tagStr = NSAttributedString(string: tagText, attributes: attributes)

    currentFullText.replaceCharacters(in: range, with: tagStr)

    self.tags.append(Tag(element: tag, range: tagRange))

    self.attributedText = currentFullText
    self.selectedRange = NSRange(location: tagRange.upperBound, length: 0)
}

这是Taggable协议:

protocol Taggable {
    var value: String { get }
    var visual: String { get }
    var url: URL { get }
}

编辑:

在这里找到答案:Using NSMutableParagraphStyle cause issue with emojis 感谢@rmaddy

0 个答案:

没有答案