Cocoa 编程/状态栏项目
状态栏项目是在菜单栏中安装的图标,靠近时钟和其他 macOS 通用图标,例如音量、Spotlight 等。这些图标提供了一个位置来保存,例如,应用程序的重要快捷方式,或者只是一个标识当前应用程序状态的图标;它们通常与菜单相关联。在本文件中,我将解释如何构建一个状态栏项目,而不是解释所有包含在 Xcode 中的类参考,以及在 ADC 网站上可用的类参考。
代码
首先,您必须记住,您的状态栏项目是一个独立的应用程序:当您关闭应用程序时,状态栏项目将被释放。通常,状态栏项目用于控制和监控最终用户看不到的进程,或者它们本身是某个东西的控制器(参见“QuickTunes”)。
我们创建一个名为“myStatusItem”的新类。状态栏项目类是 NSStatusItem,您需要在您的头文件中实例化它,以及您需要的所有其他内容
#import <Cocoa/Cocoa.h>
@interface myStatusItem : NSObject {
IBOutlet NSMenu *myMenu;
NSStatusItem *statusItem;
NSImage *statusImage;
NSImage *statusAltImage;
}
@end
您如何看到我们引入了两个图像,它们是状态栏项目的默认图标和备用图标,这些图像大小为 18x18。
下一步是编写真正的程序,即“.m”文件:我们必须告诉 MacOS 我们要安装一个状态栏项目。这是通过以下代码行实现的
statusItem = [[[NSStatusBar systemStatusBar] statusItemWithLength: NSSquareStatusItemLength] retain];
接下来,我们可以使用以下代码分配两个图像
NSBundle *bundle = [NSBundle mainBundle];
statusImage = [[NSImage alloc] initWithContentsOfFile: [bundle pathForResource: @"statusIcon" ofType: @"png"]];
statusAltImage = [[NSImage alloc] initWithContentsOfFile: [bundle pathForResource: @"statusAltIcon" ofType: @"png"]];
然后是最后几行代码,自定义我们的状态栏项目
[statusItem setImage: statusImage];
[statusItem setAlternateImage: statusAltImage];
[statusItem setMenu: myMenu];
[statusItem setToolTip: @"A tooltip"];
[statusItem setHighlightMode: YES];
最好再编写另一个方法,即dealloc
方法,在- (void) awakeFromNib
方法之后,该方法是应用程序启动后调用的主要方法。使用 dealloc,我们可以通过释放不需要的一些东西来帮助内存管理,事实上,当这种情况发生时,我们的应用程序已经终止。使用这段代码,我们想要释放构成图标的图像
- (void) dealloc {
[statusImage release];
[statusAltImage release];
[super dealloc];
}
界面
当我们创建应用程序时,使用“cocoa 应用程序”模板,Xcode 也创建了一个 NIB 文件,它包含我们程序的 UI 和资源。双击 NIB 以添加界面。由于我们已经编写了代码并指定了一些出口和我们的类,因此我们可以通过转到类视图(在 Interface Builder 的主窗口中)并从类菜单中选择“读取文件...”来刷新 NIB 标准内容;我们选择我们的“.h”。myStatusItem 类将被选中,右键单击它并实例化。接下来,在实例视图中放置一个 NSMenu 项目并像您在代码中所做的那样命名它,在本例中为“myMenu”。您可以在您的菜单下添加 NSMenuItem(s) 并为它们添加操作。
连接代码和界面
Cocoa 使用出口来连接代码和界面。如果您记得,我们定义了一个出口,NSMenu:让我们连接它!转到实例视图并选择“蓝色方框”,即您的应用程序的实例。打开检查器并转到连接面板。正如您所见,这里列出了“myMenu”。从应用程序实例到 NSMenu 图标“myMenu”进行 Control-拖动,然后点击“连接”按钮。就是这样。现在,如果您按下构建和运行按钮,您将在状态栏中看到一个 NSStatusItem。(您必须将两个图像添加到项目中的活动目标中)。