NSTextStorage
リンクの強調表示を行うためにサブクラス化を行っており、このトピックについてできる 限り多くのことを読みました。絵文字を入力するまで、すべて正常に動作します。
私のサブクラス:
private let ims = NSMutableAttributedString()
override var string: String {
return ims.string
}
override func attributesAtIndex(location: Int, effectiveRange range: NSRangePointer) -> [String : AnyObject] {
return ims.attributesAtIndex(location, effectiveRange: range)
}
override func replaceCharactersInRange(range: NSRange, withString str: String) {
ims.replaceCharactersInRange(range, withString: str)
self.edited(.EditedCharacters, range: range, changeInLength:(str as NSString).length - range.length)
}
override func setAttributes(attrs: [String : AnyObject]?, range: NSRange) {
ims.setAttributes(attrs, range: range)
self.edited(.EditedAttributes, range: range, changeInLength: 0)
}
複雑なことは何もありません。次に、悪名高い文字を入力すると、何らかのランダムな理由で Courier New に切り替わります。
今、私はキャラクターを選んでいます.この狂気を引き起こす他の人もいます. 入力時にフォントを照会しましたが、System > Apple Emoji > Courier New から取得できます。
processEditing()
また、セミが問題を解決するフォントを設定しようとしました。これにより、余分なスペースが追加されます(シミュレーターではありません)。そして、値をハードコーディングしています == 悪い。
究極の質問:
私は何を間違っていますか?開発者が NSTextStorage をサブクラス化したと確信している他の人の実装では、この問題は見られません。
注: objc.io のデモ アプリでも同じ問題が発生していることを確認できます。