2

プロパティ パネルを NSDocument ベースのアプリのセカンダリ ウィンドウとして実装しようとしています。実装は、NSWindow を (NSWindowController 経由で) 示しています。

目標は、メイン (ドキュメント) またはセカンダリ (プロパティ ウィンドウ) のいずれかがアクティブな場合に、セカンダリ ウィンドウ (「プロパティ ウィンドウ」) のプロパティ修飾子を CMD-Z を使用して元に戻すことができるようにすることです。

何らかの理由で、これは私を避けています。

私の現在の実装/テストは非常に基本的です。このアイデアをテストするために、NSSlider を「aValue」というプロパティにバインドし、「Properties」NWindowController で公開しました。これは次のようになります。

- (void) undoAValueUsing:(int)oldValue {
   self.aValue = oldValue;
}

- (void)setAValue:(int)aValue {
    if(aValue != _aValue) {
    NSLog(@"Value is now: %d", aValue);
    [[self.undoManager prepareWithInvocationTarget:self] undoAValueUsing:_aValue];
    [self.undoManager setActionName:@"Ra"];
    _aValue = aValue;
}  

したがって、プロパティを変更すると、「元に戻す」アクションが記録されます。

問題は、元に戻すが表示されないことです...それが登録されていないか、アクティブなメニュー項目が他の元に戻すマネージャーを見ているかのようです。CMD-Z は単に「ビープ音」 (別名: noop) を生成します。

この単純な例の完全なコードは次のとおりです: https://dl.dropboxusercontent.com/u/421935/TestApp/Test.zip

ボタンをクリックしてプロパティ パネルを表示し、一番上のスライダーを変更すると (他のスライダーには元に戻す機能が実装されていません)、CMD-Z で元に戻すことができるはずです。

ところで: サンプル コードを見ると、カスタム ウィンドウ manager.undoManager を document.undoManager に設定しようとしたことがわかります。違いはありませんでした。

うーん。私は気が狂ってしまうと思います。これはとてもシンプルなはずです!明らかな何かが欠けているに違いありません!

インターネットの人々に何か新しい発見はありますか?

4

1 に答える 1

2

答えは簡単です。ドキュメント自体を NSWindow (セカンダリ ウィンドウ) のデリゲートに設定します。次に実装します。

  - (NSUndoManager *)windowWillReturnUndoManager:(NSWindow *)window 

ドキュメントで、ドキュメントの undoManager を返します。

終わり。

于 2013-10-23T00:24:18.010 に答える