6

ドキュメント ベースのアプリでバージョンと自動保存を有効にしたので、OSX 10.7 で各ドキュメントのバージョン ブラウザ (タイム マシンのようなインターフェイス) を表示できるようになりました。

+ (BOOL)autosavesInPlace{ return YES; }

その中にテキストビューがあり、WWDC ビデオの 1 つ、セッション 107 で提案されているように、バージョン ブラウザーに入るときにテキスト入力などを無効にしたいです。そこで、NSWindowDelegate メソッドを実装しました。

- (void)windowWillEnterVersionBrowser:(NSNotification *)notification{
    [myTextView setEditable:NO];
}
- (void)windowWillExitVersionBrowser:(NSNotification *)notification{
    [myTextView setEditable:YES];
}

現在、myTextView画面の左側のドキュメント (現在のドキュメント) ウィンドウでは無効になっていますが、右側のドキュメント (過去のバージョン) には引き続きカーソルが表示されます。

textView は編集できませんが、カーソルが表示されます。また、上記の方法で他のものを無効にして再度有効にしていますが、上記の方法でコードを記述すると、過去のバージョンのウィンドウ/ドキュメントではなく、現在のドキュメント ウィンドウ/ドキュメントにのみ影響するようです。

おそらく他の誰かが同じ問題を抱えていますか?どうすればこの作業を正しく行うことができますか? :)

編集

セッション 107 の WWDC サンプル コードを探していましたが、フォルダーが空です。何か見逃していましたか、それともこのセッションのサンプル コードはありませんか?

編集2

アプリケーション キットのリリース ノート (ライオン)windowForSheetは、バージョン ブラウザーの右側のウィンドウを作成するときに呼び出されると述べています。

- (NSWindow *)windowForSheet{
    CustomWindow *win = (CustomWindow *)[super windowForSheet];
    [win setUserInteractionEnabled:![self isInViewingMode]]; //disable stuff here
    return win;
}

しかし、ウィンドウがバージョン ブラウザから戻ると、ユーザー インタラクションは引き続き無効になります。:(

4

1 に答える 1

5

最終的に私は答えを見つけました:

NSWindowDelegateメソッドは現在のドキュメントのウィンドウ (バージョン ブラウザの左側にあるドキュメント) に対して呼び出され、他のウィンドウはオーバーライドすることで調整でき-[NSDocument windowForSheet];ます-[NSDocument windowControllerDidLoadNib:];

ここに短いチュートリアル/メモを投稿しました:OSX 10.7のバージョン

于 2011-08-02T06:02:08.690 に答える