1

10.5以降で動作するMacアプリケーションにはCoreDataを使用しています。エンティティのコンテンツ(テキスト属性)は、バインディングを介してNSTextViewに表示されます。ユーザーはそこでテキストを編集できます。

管理対象オブジェクトのコンテキストを保存しようとすると、マウスカーソルがテキストビューから消え、テキストビューが上にスクロールします。

ユーザーがフォーカスを失うのは面倒なので、CoreData /bindingがこれを行うのを防ぐにはどうすればよいですか?

編集:質問を完了としてマークするための個別の回答としてソリューションを追加しました!

4

2 に答える 2

0

保存する前にcommitEditingを確認してください。これにより、テキストビューはフォーカスを失ったり、現在のテキストフィールドのすべての変更を元に戻したりします。この動作を防ぐことはできないと思います。保存後、選択範囲とカーソル位置を復元できます。この問題の実際の解決策にも興味があります。

于 2010-11-30T12:20:36.093 に答える
0

この問題の解決策を見つけました。管理対象オブジェクトのコンテキストを保存する前に、テキストビューの「状態」(選択した範囲とスクロール位置)を保存します

NSRange selectedRange   = [self.textView selectedRange];
NSScrollView* scrollView    = [self.textView enclosingScrollView];

// get the current scroll position of the document view
NSPoint scrollPosition = [[scrollView contentView] bounds].origin;

エンティティを保存した後、選択した範囲とスクロール位置を復元します

[self.textView setSelectedRange:selectedRange];

// restore the scroll location      
[[scrollView contentView] scrollToPoint: scrollPosition];
[scrollView reflectScrolledClipView: [scrollView contentView]];

スクロールビューのスクロール位置を設定するための2つの可能な解決策を見つけました

于 2010-12-03T08:59:28.253 に答える