iOS/iPhone/iPad/watchOS/tvOS/MacOSX/Android プログラミング, Objective-C, Cocoa, Swiftなど
_ [OSX]MainMenu.xibのメニーにアクションを設定する
某所で、nibのメニューの項目をソースコードで設定する方法の説明があったので自分で試してみた。
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
NSMenu *mainMenu = [[NSApplication sharedApplication] mainMenu];
NSMenuItem *menuItem = [mainMenu itemWithTitle:@"File"];
NSLog(@"%@", menuItem);
NSMenu *subMenu = [menuItem submenu];
menuItem = [subMenu itemWithTitle:@"Close"];
NSLog(@"%@", menuItem);
[menuItem setTarget:self];
[menuItem setAction:@selector(demo:)];
}
- (IBAction)demo:(id)sender
{
NSLog(@"%s", __func__);
}
nibで定義したメニーに対してという事で、NSApplicationのmainMenuメソッドでNSMenuのインスタンスを取得する。
これは、メニューの塊のようなので、itemWithTitle:メソッドでタイトルからNSMenuItemのインスタンスを取得する。
ここで取得できるのは、メニューバーに対する、TOPのFileやEditメニューの塊のようなので、さらに取得できたものに対して、ここでは"Close"メニューを取得する。
これに対して、setTarget:とsetAction:を行えば、File/Closeメニューを選択されると、ここで設定したメソッドが呼ばれるようになる。
2012-07-09 22:14:14.668 Demo[13089:403]
2012-07-09 22:14:14.671 Demo[13089:403]
2012-07-09 22:14:21.790 Demo[13089:403] -[AppDelegate demo:]