【问题标题】:why the subclass of NSMenu not responding?为什么 NSMenu 的子类没有响应?
【发布时间】:2011-06-02 21:17:10
【问题描述】:

我在一个单独的 xib 文件中创建了一个菜单资源,使其成为 NSMenu 的子类,如下所示,文件的所有者为 StatusMenu

@interface StatusMenu : NSMenu
{
@private
    IBOutlet NSMenuItem *menuitem1;
    IBOutlet NSMenuItem *menuitem2;
}

- (IBAction)action1:(id)sender;
- (IBAction)action2:(id)sender;
- (void)show;
@end

其中show方法的实现方式如下

- (void)show
{
    NSImage *menuImage = [[NSImage alloc] initWithContentsOfFile: [[NSBundle mainBundle] pathForResource:@"myicon" ofType:@"png"]];

    statusItem = [[[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength] retain];
    [statusItem setImage:menuImage];
    [statusItem setMenu:self];
    [statusItem setHighlightMode:YES];
}

然后我在应用委托中创建并启动了 StatusMenu 实例,如下所示

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    statusMenu = [[StatusMenu alloc] init];
    statusMenu.user = self.user;
    [statusMenu show];
}

现在,我可以看到状态栏上的图标。但是当我点击图标时,没有响应发生。有什么问题?

【问题讨论】:

  • 这有很多问题。你到底想达到什么目的?
  • Rob,我想要实现的是干净的代码。我不想将所有菜单处理代码(action1、action2 等)塞进我的主 AppDelegate 类中。

标签: cocoa subclass nsmenu


【解决方案1】:

你通常不会继承 NSMenu 来做你想做的事情。

您可以简单地创建另一个类(调用它MenuController 或其他东西),将它放在您的故事板/xib 中,并在您的AppDelegate 中为它提供一个出口。

Here`s a sample project for you to check out.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-16
    • 2021-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多