这是我的代码:
if #available(OSX 10.10, *) {
if let b = statusItem.button {
popover.showRelativeToRect(b.bounds, ofView: b, preferredEdge: .MinY)
}
} else {
}
else
块适用于OS X Mavericks,因为NSStatusItem.button
不可用。有没有一种简单的方法来显示相对于状态项的弹出窗口?如果没有,是否可以在没有箭头的情况下在屏幕中央显示弹出窗口?
答案 0 :(得分:1)
在您访问statusitem按钮之前,您必须提供自己的视图。 然后所有工作都相同
要保留原始行为,请绘制一个看起来像状态项的自定义视图;)
e.g。
@interface DDQuickMenuStatusItemView : NSView
@property(weak) NSStatusItem *item;
//...
@end
@implementation DDQuickMenuStatusItemView
//...
- (void)drawRect:(NSRect)dirtyRect {
NSImage *image = nil;
if(self.item) {
[self.item drawStatusBarBackgroundInRect:self.bounds withHighlight:NO];
image = self.item.image;
}
if(image) {
NSRect r = self.bounds;
r.size = [image size];
r = [self.class centerRect:r inRect:self.bounds];
r = [self centerScanRect:r];
[image drawInRect:r fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1];
}
}
#pragma mark -
+ (CGRect)centerRect:(CGRect)rect inRect:(CGRect)inRect
{
CGRect result = rect;
result.origin.x = inRect.origin.x + (inRect.size.width - result.size.width)*0.5f;
result.origin.y = inRect.origin.y + (inRect.size.height - result.size.height)*0.5f;
return result;
}
@end
请注意,该视图是示例而非生产就绪;)