跳至内容

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。(您必须将两个图像添加到项目中的活动目标中)。

华夏公益教科书