gpt4 book ai didi

cocoa - 在 Cocoa 中为 NSMenuItem 设置目标/操作的正确方法?

转载 作者:行者123 更新时间:2023-12-03 16:08:02 24 4
gpt4 key购买 nike

我在执行一些初始 Cocoa 编程时遇到了一些真正的困难。

本质上,我有一个 NSStatusBar 项目,其中附加了一个 NSMenu 作为菜单。该菜单有一个NMMenuItem。在 IB 中,我已将 NSMenuItem 连接到 NSObject ,该 NSObject 本身设置为 ApplicationDelegate 的类;然后,我将接收到的操作设置为 ApplicationDelegate 中的 IBAction 方法。我认为一切都正确连接,除了当我运行程序并单击菜单项时,不调用 IBAction 方法。我实在是看不下去了。这是相关代码。

应用程序委托(delegate) h 文件:

#import <Cocoa/Cocoa.h>

@interface sssAppDelegate : NSObject <NSApplicationDelegate> {
IBOutlet NSMenu *statusMenu;
NSStatusItem *statusItem;
}

- (IBAction)showPreferencePanel:(id)sender;

@end

应用程序委托(delegate) m 文件:

#import "sssAppDelegate.h"
@implementation sssAppDelegate

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
// Insert code here to initialize your application
}

-(void)awakeFromNib{
statusItem = [[[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength] retain];
[statusItem setMenu:statusMenu];
[statusItem setTitle:@"Status"];
[statusItem setHighlightMode:YES];
}


- (IBAction)showPreferencePanel:(id)sender {
NSLog(@"Hello World!");
}

@end

正如我所说,在IB中,我已将NSMenu连接到应用程序委托(delegate)中的statusMenu(因此菜单全部显示在NSStatusBar下) >),并且我已使用 Application Delegate 类将 NSMenu 中的 NSMenuItem 连接到 NSObject,并将其连接起来以调用 showPreferencePanel,但当我运行它时什么也没有发生!

我也以编程方式尝试过,但仍然无法调用 IBAction 方法。

编辑:我会附加一些屏幕截图来显示 IB 中的设置,但我还没有被允许。

包含添加到 NSStatusBar 的菜单的主 Nib ,如下所示:

  • FO NSApplication
  • FR FirstResponder
  • 应用程序NSApplication
  • 字体管理器NSFontManager
  • 主菜单NSMenu
    • 菜单项(首选项)NSMenuItem
  • Sss 应用程序委托(delegate) sssAppDelegate

NSMenuItem:

  • 发送操作 - showPreferencePanel--->Sss 应用程序委托(delegate)

Sss 应用程序委托(delegate):

  • 导出 - statusMenu--->主菜单
  • 收到的操作 - showPreferencePanel:--->主项(首选项)

最佳答案

以编程方式,您尝试过吗:

[statusItem setTarget:someTarget];
[statusItem setAction:@selector(someSelector)];

应该可以。

关于cocoa - 在 Cocoa 中为 NSMenuItem 设置目标/操作的正确方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5206286/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com