[英]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.