【发布时间】:2017-01-18 17:41:34
【问题描述】:
我在自定义 NSTextStorage 子类中遇到了表情符号问题。该类不存储传递给它的任何属性。相反,它会生成自己的:
override func attributesAtIndex(location: Int, effectiveRange range: NSRangePointer) -> [String : AnyObject] {
if range != nil {
range.memory = NSMakeRange(0, self.string.length)
}
let attributes = [
NSFontAttributeName: NSFont.systemFontOfSize(14)
]
return attributes
}
override func setAttributes(attrs: [String : AnyObject]?, range: NSRange) {
// does nothing
}
这大部分都可以正常工作。但是,如果字符串中有任何表情符号,它们根本不会出现。在检查 NSTextView 对文本存储的调用时,文本视图似乎试图将任何表情符号范围的字体属性设置为 AppleColorEmoji 字体,只要它们出现。如果您将文本视图作为“属性真相”的来源,那很好,但我不希望我的程序那样工作。就我而言,文本存储需要是任何属性的唯一供应商。它不能监听文本视图发送给它的任何东西,属性方面。
我是否必须手动检测字符串中的任何表情符号并手动设置 AppleColorEmoji 字体?或者,还有更好的方法?我已经尝试过使用后备字体并自动搜索包含缺失字符的字体,但使用这些方法似乎无法覆盖表情符号。
【问题讨论】:
标签: fonts emoji nstextview textkit nstextstorage