私のアプリ(swift、OSX、Xcode、すべての最新版)には、ユーザーが入力できるNSTextViewがあります。 NSTextViewにはリッチテキスト、グラフィックス、およびNSInspectorBarが有効になっています。画像挿入後にNSTextViewが更新されない
私はNSTextViewの内容をwebarchive形式に読み込んだり保存したりします(画像の乱れがありますが、画像を含む移植可能な形式が必要です)。
これまでのところとても良いです。細部を除いてすべてが機能します。 TextViewに画像を挿入すると、表示されません。しかし、それはそこにあります。私が保存してロードすれば、それが現れるからです。
guard let theImage = NSImage(contentsOfURL: openPanel.URL!) else {
showErrorMessage("Unable to load image")
return
}
// self.textEditor is the NSTextView
guard let store = self.textEditor.textStorage else { abort() }
let attachment = NSTextAttachment()
attachment.image = theImage
let attrString = NSAttributedString(attachment: attachment)
let range = self.textEditor.selectedRange()
store.replaceCharactersInRange(range, withAttributedString: attrString)
私はその合理的にまっすぐ進むと思う:私は私がNSOpenPanelからイメージへのパスを取得する(NSTextViewに画像を挿入する方法ここで
だ置き換える、AttributedStringのに追加、画像を読み込みますAttributedStringのと、選択した文字
しかし何もNSTextViewに全く変化が現れていない私はwebarchiveとしてNSTextStorage内容を保存する場合:。。。
guard let store = textEditor.textStorage else { abort() }
let attr: [String: AnyObject] = [NSDocumentTypeDocumentAttribute: NSWebArchiveTextDocumentType]
let data = try store.dataFromRange(NSMakeRange(0, store.length), documentAttributes: attire)
//... save 'data' to DB ...
、その後でそれらをバックリロード:
//... load 'data' from the DB ...
guard let store = textEditor.textStorage else { abort() }
let str = try NSAttributedString(data: data, options: [NSDocumentTypeDocumentAttribute:NSWebArchiveTextDocumentType], documentAttributes: nil)
store.setAttributedString(str)
は...画像は正確に適切な場所に表示されます。
私はこれでかなり混乱しています。誰かが私が逃しているものについてのアイデアはありますか?
動作しませんでしたlet frame = self.textEditor.frame
self.textEditor.setNeedsDisplayInRect(frame)
を: -
はところで私が使用してリフレッシュを強制しようとしています。
アドバイスあなたに与えることができるアドバイスはありがたいです。 乾杯。 Paul
編集:補遺...私はNSTextAttachmentCellsを使いこなしていますが、彼らが働くことを期待しています。彼らはまったく異なる方法で失敗します。私はちょうどで上記画像の挿入コードを交換する場合
:
let cell = NSTextAttachmentCell(imageCell: theImage)
let txtAtt = NSTextAttachment()
txtAtt.attachmentCell = cell
let str = NSAttributedString(attachment: txtAtt)
let range = self.textEditor.selectedRange()
store.replaceCharactersInRange(range, withAttributedString: str)
...その後の画像が挿入時にすぐに表示され、かつ正確に適切な場所でください。しかし、彼らは救われません!つまり、保存してリロードすると(上記のコードに従って)、それらはwebarchiveに含まれません。
編集^ 2: だから、上記から明らかな結論はTextAttachment に添付された画像ともTextAttachmentに取り付けられている。NSTextAttachmentCell、に添付された画像の両方を持つことです。まあ...それは動作しません。しかし、私はTextAttachmentを作成し、画像のTIFF表現のデータを渡します。 AttachmentCellも作成します。これで、挿入が表示され、保存されます。
TIFFは膨大であるという欠点しかありません。画像はメモリサイズの3倍に拡大されます。
誰でもこの作品の理由についていくつかのアイデアを提供できますか?
最終的な1つのポイント... NSTextAttachmentCellは** OSXでのみ**必要です。ドキュメント:_On OS Xでは、テキスト添付ファイルは、NSTextAttachmentCellプロトコルに準拠したセルオブジェクトを使用して、マウスイベントを描画して処理します_ – Paul
私はあなたにすべて借りています –