2010-09-02 75 views
2

我有一個簡單的基於文檔的應用程序,它只是簡單地創建一個自定義XML文件。它使用「大綱視圖」導航XML文檔。選擇「大綱視圖」中的項目時,自定義視圖將顯示爲文檔視圖的子視圖,以允許用戶輸入數據。其中一個視圖有NSTextField。它有「允許撤消」標誌設置。我進行了測試,以確保在編輯完成時在NSDocument上調用了撤消管理器。因此,控制似乎正在響應第一響應者,因爲它應該。無法從NSTextField成功註冊撤消

在IBAction中,我使用ActionName,因此它將在菜單中正確顯示。現在是這個問題。不僅ActionName不顯示在菜單中,而且單擊撤消操作也不會顛倒在NSTextField上採取的操作,而是在其之前註冊的操作。在使用NSTextField設置撤消時,是否有我忽略的一些內容?

(IBAction爲)textFieldChanged:(ID)發送{

...這裏的一些代碼...

[自我的UndoManager] setActionName:@ 「更改文本」];

}提前

感謝, 羅布

回答

1

是在同一個窗口中的文本字段作爲您的大綱視圖(即文檔的主窗口)?如果不是,則需要爲該額外窗口設置一個委託,並通過返回文檔的撤銷管理器來響應-windowWillReturnUndoManager:

因爲你說--undoManager被稱爲針對你的文檔,我猜上述不是這種情況。我從未知道文本字段在文檔的主窗口中不使用文檔的撤銷管理器,並且選中「允許撤消」。你是否嘗試了一些簡單的操作,例如刪除該字段並重新創建它?有時IB會做一些奇怪的事情......足夠有趣的是,在Interface Builder本身中撤消/重做更改時,這些問題往往會出現。 :-)

+0

文本字段和大綱視圖位於同一窗口中,但位於分割視圖的不同側。刪除和替換文本字段不起作用。你知道在文本字段上調用IBAction之前是否調用了撤銷管理器? – Rob 2010-09-03 15:26:57

+0

我終於搞定了。我必須關閉IB中的「Allows Undo」,然後使用委託「 - (BOOL)控制:(NSControl *)控制textShouldEndEditing:(NSText *)fieldEditor」並直接調用registerUndoWithTarget命令。 – Rob 2010-09-03 18:13:56