2015-10-20 3 views
-1

Это мой код:NSPopover показать относительно 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 не доступен. Есть ли простой способ показать popover относительно элемента статуса? Если нет, возможно ли вместо этого отобразить popover в центре экрана без стрелки?

+0

извините, но я не работаю с NSPopover в то время, но .... Что проблема? ваш, если кажется, нормально для 10.9, а также –

+0

ach Я получаю это, это о кнопке .... –

ответ

1

Прежде чем вы получили доступ к кнопке 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 

Обратите внимание, что вид является образцом, а не готовый к производству;)

+0

Спасибо за ответ! К сожалению, я новичок Swift и не могу работать над кодом, поэтому я подумал, что просто покажу всплывающее окно в центре экрана, которое должно быть намного проще, чем я думаю. Не могли бы вы рассказать мне, как это сделать? – Elmo

+0

Я боюсь, что я не знаю прямо сейчас. Я могу попробовать сегодня вечером - я также могу обеспечить быструю реализацию вышеуказанного, тогда на всякий случай –

Смежные вопросы