[OSX]MainMenu.xibのメニーにアクションを設定する | Cocoa練習帳

[OSX]MainMenu.xibのメニーにアクションを設定する

[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:]



関連情報
Cocoa Event Handling Guide: Event Handling Basics



【Cocoa練習帳】
http://www.bitz.co.jp/weblog/

http://ameblo.jp/bitz/(ミラー・サイト)