簡體   English   中英

NSPopover 顯示相對於 NSStatusItem

[英]NSPopover show relative to NSStatusItem

這是我的代碼:

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不可用。 有沒有一種簡單的方法來顯示相對於狀態項的彈出框? 如果沒有,是否可以在沒有箭頭的情況下在屏幕中央顯示彈出窗口?

在您訪問 statusitem 按鈕之前,您必須提供您自己的視圖。 然后一切都一樣


要保留原始行為,請繪制一個看起來像狀態項的自定義視圖;)

例如

@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

請注意,該視圖是一個示例,尚未准備好用於生產;)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM