繁体   English   中英

NSStatusItem不显示图像和标题

[英]NSStatusItem not showing image and title

我正在尝试制作一个状态栏项目,如右上方的电池或时间机器指示器。 我的代码如下

- (void)activateStatusBarItem:(id)object{
NSStatusBar *systemBar = [NSStatusBar systemStatusBar];

NSStatusItem *theItem = [systemBar statusItemWithLength:NSVariableStatusItemLength];

NSImage *statusBarIcon = [NSImage imageNamed:@"icon-sleep.png"];
statusBarIcon.size = CGSizeMake(NSSquareStatusItemLength, NSSquareStatusItemLength);

[theItem setImage:statusBarIcon];
[theItem setTitle:@"abc"];
[theItem setTarget:self];
[theItem setAction:@selector(showHUD:)];
}

应用启动时调用此方法。 但是,我在菜单上看不到Item。 它曾经工作过一次,但没有图像的相同代码。

同样,当我查看Apple的方法时:-setTitle:-setImage:-setTarget:-setAction:所有人都说它们同时可用且已贬值,请看下面的图像。 还有其他办法,我可以做到。 我希望单击该项目时可能会出现一个窗口/面板,该窗口/面板可能已附加到栏中。

在此处输入图片说明

您正在将图像尺寸设置为无意义的值。 NSSquareStatusItemLength为-2。 这是一个前哨值,而不是实际长度。

您将需要使用systemBar.thickness来确定用于正方形状态项的实际大小。

关于不推荐使用的方法,在10.10中, NSStatusItem具有新的button属性。 应该使用它而不是现在不赞成使用的view属性(您没有使用过)。 现在,所有其他不推荐使用的属性仅包含调用按钮上相应方法的方法。 使用这些掩护方法是安全的,它们应该仍然有效。

您没有对状态项保持强烈引用。 它只是存储在局部变量中。 如果使用的是ARC,则表示它在-activateStatusBarItem:方法的末尾释放,该方法将其从状态栏中删除。 因此,您正在快速创建并删除它。 您应该在实例变量中保持强引用。 +[NSStatusBar statusItemWithLength:]记录了保持强烈引用的要求:

接收方不会保留对状态项的引用,因此您需要保留它。 否则,在重新分配对象后,该对象将从状态栏中删除。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM