2

アプリで元に戻す/やり直しができました。

undoAction:メソッドとredoAction:メソッドを使用してアクションを実装するために、undoおよびredoメニューアクションのターゲットをアプリデリゲートに設定しました。メニュー項目で有効になっているバインディングは、undo managerのcanUndoプロパティとcanRedoプロパティにバインドされており、これらは期待どおりに機能します。元にしたスタックにプッシュするときにアクション名を設定しましたが、メニューに表示されません。

メニューに、[ゴミ箱に移動を元に戻す]や[ゴミ箱に移動をやり直し]ではなく、常に[元に戻す]または[やり直し]と表示されるのはなぜですか?メニュー項目は通常、バイパスしている魔法によって更新されますか?アプリデリゲートがレスポンダーチェーンに含まれておらず、アクションが表示されないため、レスポンダーチェーンを使用していません。

UNDOマネージャーは私のアプリデリゲートで作成されます。

更新:ウィンドウのUNDOマネージャーを使用するように変更しても違いはありません。

-(void)undoableRemoveItemsFromListAtIndexes:(NSIndexSet*)itemIndexes;
{
    NSArray *removedItems = [[self.listController arrangedObjects] objectsAtIndexes:itemIndexes];
    [[self.undoManager prepareWithInvocationTarget:self] undoableAddItems:removedItems toListAtIndexes:itemIndexes];
    [self removeItemsFromListAtIndexes:itemIndexes];
    [self.undoManager setActionName:@"Move to Trash"];
}
4

2 に答える 2

1

元にしいマネージャーが-isUndoingであるかどうかを確認し、文字列を適切に交換します。

NSUndoManager * um = [self undoManager];
// ...
[um setActionName:([um isUndoing]) ? @"Remove Foo" : @"Add Foo"];

REDOは、REDOスタックにプッシュされたUNDOであることを覚えておくことが重要です。

于 2011-03-22T13:35:35.600 に答える
0

答えは次の1つ以上であることが判明しました(NSCoderナイトキャンベルのヘルプから):

  • 私が作成したものではなく、ウィンドウの元に戻るマネージャーを使用します

  • 私が持っていたバインディングを削除し、メニュー項目をファーストレスポンダーに接続します

  • アプリデリゲートのメソッドにundo:とredo:の名前を付けます。

私がすべてをやったら、それはすべて魔法のように機能しました。

于 2011-03-23T04:26:30.257 に答える