我正在为我的应用添加标记。标签文本在发送到正常工作的服务器时看起来像“{{@ 23235}}”。但是,当在消息中主动标记某人时,对于某些表情符号(并非全部),将发生以下情况:
正确添加标签:
但是当我离开(或者真的键入另一个“@”或任何角色)时,它会执行以下操作:
奇怪的是,这只发生在某些表情符号类型上。
我尝试使用以下函数作为我用于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