我正在學習可可,並且我已經完成撤銷工作,沒有太多麻煩。但是setActionName:方法令我困惑。這裏有一個簡單的例子:一個玩具應用程序,其窗口包含一個文本標籤和兩個按鈕。按開啓按鈕,標籤顯示「開」。按下「關」按鈕,標籤更改爲「關」。這裏有兩個相關的方法(我寫的應用程序的唯一代碼):如何讓NSUndoManager的撤銷/重做動作名稱正常工作?
-(IBAction) turnOnLabel:(id)sender
{
[[self undoManager] registerUndoWithTarget:self selector:@selector(turnOffLabel:) object:self];
[[self undoManager] setActionName:@"Turn On Label"];
[theLabel setStringValue:@"On"];
}
-(IBAction) turnOffLabel:(id)sender
{
[[self undoManager] registerUndoWithTarget:self selector:@selector(turnOnLabel:) object:self];
[[self undoManager] setActionName:@"Turn Off Label"];
[theLabel setStringValue:@"Off"];
}
這是我想到:
- 我單擊打開按鈕
- 標籤更改爲說「論「
- 在編輯菜單中該項目‘撤消打開標籤’
- 我點擊該菜單項
- 標籤更改爲說‘關’
- 在編輯菜單是
事實上,所有這些事情的工作項目「重做打開標籤」當我從最後一個期望分開。編輯菜單中的項目顯示「重做關閉標籤」,而不是「重做打開標籤」。 (當我點擊那個菜單項時,標籤確實變成On,正如我所料,但這使得菜單項的名稱更加神祕。 ?條款顯示我希望他們
我只是在這裏提到'setActionName:'的功能而不是'redoActionName:'或'undoActionName:'的功能。 – Vassilis 2011-08-13 08:35:53