回答
「Enabling Menu Items」 in Application Menu and Pop-up List Programming Topics這樣說:
默認情況下,在用戶每次事件發生時,會自動
NSMenu
啓用和禁用每個可見菜單項的時間。您也可以使用NSMenu
的update
方法強制更新菜單。
這:
如果菜單項的目標不能被設置(即,如果它是
nil
- 通常,如果菜單項連接到急救員)和NSMenu
對象不是上下文菜單,則NSMenu
使用響應者鏈(在Cocoa Event Handling Guide中的「The Responder Chain」中描述)來確定目標。如果在實施該項目的動作的響應者鏈中沒有對象,則該項目被禁用。 如果響應者鏈中有一個實現項目動作的對象,則NSMenu
將檢查該對象是否實現validateMenuItem:
或validateUserInterfaceItem:
方法。如果沒有,則菜單項被啓用。如果是,則菜單項的啓用狀態由方法的返回值確定。
默認情況下(當您創建使用「Cocoa應用程序」模板的項目),複製菜單項的目標是急救員(nil
)和動作是copy:
。因此,您需要在響應者鏈中的某個項目上實施copy:
方法。這足以啓用菜單項。如果您想更精確地控制啓用菜單項的時間,則還可以執行validateMenuItem:
以檢查哪個菜單項正在驗證,並根據情況返回YES
或NO
。
例如,應用程序委託位於響應者鏈中。所以,你可以將這個方法添加到CMAppDelegate
:
- (IBAction)copy:(id)sender {
NSLog(@"%@ %s", self, __func__);
}
這應該足以使複印菜單項。當然,選擇編輯>複製只會將消息記錄到控制檯。實際編寫複製用戶所選內容的代碼由您決定。
如果你想更精細的控制,嘗試給應用程序的委託連接到複印菜單項的出口:
@interface AppDelegate : NSObject <NSApplicationDelegate>
@property (assign) IBOutlet NSWindow *window;
@property (strong) IBOutlet NSMenuItem *copyMenuItem;
@end
胡克出口處MainMenu.xib
。那麼你可以這樣實現validateMenuItem:
:
- (BOOL)validateMenuItem:(NSMenuItem *)menuItem {
if (menuItem == self.copyMenuItem) {
NSLog(@"%@ %s %@", self, __func__, menuItem);
return [self shouldEnableCopyMenuItem];
}
return NO;
}
- 1. 如何啓用asp.net中的菜單項
- 2. 如何啓用EditText中的「複製粘貼」菜單?
- 3. 啓用/禁用菜單項
- 4. 如何製作功能主菜單?
- 5. Action Bar菜單項複製運行
- 6. 在Wordpress 3中啓用菜單主題
- 7. PyCharm重複的主菜單
- 8. Controllling Drupal的主動/主動-TRAIL重複的菜單項
- 9. MVC3 _Layout.cshtml ...禁用/啓用菜單項
- 10. 如何在Android自定義主題中啓用菜單?
- 11. 如何爲PopupWindow製作選項菜單?
- 12. 如何製作動態選項菜單?
- 13. 製作動畫主菜單
- 14. 的Joomla主菜單定製
- 15. 'Embed Objects In'菜單項全部禁用。如何啓用?
- 16. 複製菜單項,每次它在打開溢出選項菜單
- 17. 菜單項已啓用,但仍灰顯
- 18. 更新Eclipse菜單項啓用狀態
- 19. 重新使用主菜單項作爲彈出菜單
- 20. 用於主菜單的AngularJS控制器
- 21. Eclipse-如何從文件菜單啓用此類選項?
- 22. 如何禁用單個菜單項?
- 23. 如何啓用功能區菜單?
- 24. 如何從彈出菜單啓用editText?
- 25. 從標籤複製菜單
- 26. 如何製作macOS應用程序有兩個主菜單
- 27. 如何使用Secondary Menu的Drupal 6控制主菜單鏈接?
- 28. MySQL複製簡單的主/從複製
- 29. WordPress的CSS菜單複製 - 菜單項和下拉菜單中的項目右移
- 30. 複選框菜單項不起作用
謝謝!它的幫助! – Kepler 2013-04-05 20:04:21