NSMenu委托不会触发menuWillOpen

时间:2017-02-08 21:26:07

标签: objective-c cocoa nsmenu nsstatusbar

我有一个Interface Builder NSMenu-Object。我添加了自定义类“StatusBarMenu”。

StatusBarMenu.h文件如下所示:

@interface StatusBarMenu : NSMenu <NSMenuDelegate>

StatusBarMenu.c文件如下所示:

- (void)menuWillOpen:(NSMenu *)menu {
    `NSLog(@"open");`
}

菜单在AppDelegate.c中分配如下:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
    self.statusBar = [[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength];
    self.statusBar.highlightMode = YES;
    [self.statusBar setMenu:self.statusMenu];
}

AppDelegate.h

#import <Cocoa/Cocoa.h>
#import "StatusBarMenu.h"
@interface AppDelegate : NSObject <NSApplicationDelegate>
@property (strong, nonatomic) NSStatusItem *statusBar;
@property (weak) IBOutlet StatusBarMenu *statusMenu;

菜单打开,但不调用menuWillOpen。 我错过了什么吗?

我感谢任何帮助! 感谢。

1 个答案:

答案 0 :(得分:1)

您必须通过连接(statusMenu&gt; delegateAppDelegate)或applicationDidFinishLaunching

中的代码在Interface Builder中设置委托
self.statusMenu.delegate = self;