0

モデルオブジェクトに格納されている属性付き文字列からコンテンツを取得するテキストビューがあります。これらのモデルオブジェクトのいくつかをドロワーにリストし、ユーザーが1つをクリックすると、テキストビューがそのコンテンツを交換します。

ここで、元にたりマネージャーをテキストビューに交換する必要があります。モデルオブジェクトでundoマネージャーを初期化し、undoManagerForTextViewを使用してテキストビューに戻しますが、何かが正しくありません。

戦略的に配置されたロギングステートメントは、すべてが計画どおりに機能していることを示しています。起動時に、新しいモデルオブジェクトが正しく初期化され、null以外のUNDOマネージャーが常にテキストビューによってプルされます。しかし、実際に元に戻すことになると、私は自分が望む動作を得ることができません。

ウィンドウを開き、何かを入力してcmd + zを押すと、元に戻すことができます。ウィンドウを開き、何かを入力し、テーブルで新しいモデルを選択し、何かを入力し、最初のモデルに戻って元に戻そうとすると、ビープ音だけが鳴ります。

ドキュメントの何かが私に眉を上げさせました。それは、いくつかのモデルオブジェクトで元に戻すことができないことを意味するからです。

デフォルトの元に戻すおよびやり直しの動作は、フィールドまたはセルが最初のレスポンダー(つまり、キーボードアクションのフォーカス)である限り、テキストフィールドおよびセル内のテキストに適用されます。挿入ポイントがフィールドまたはセルを離れると、以前の操作を元に戻すことはできません。

4

1 に答える 1

2

NSUndoManager をサブクラス化し、オーバーライドremoveAllActionsWithTarget:してremoveAllActions、少なくともそれらをログに記録し、おそらくノーオペレーションにすることができます。

元の NSUndoManager の代わりにサブクラスをインスタンス化することを忘れないでください。(忘れがちで、これを行う必要があることに気付いていない読者もいるかもしれません。)

于 2010-03-21T20:51:04.827 に答える