2015-01-29 2 views
1

У меня возникли трудности с правильной работой моего NSPopover. StatusItem появляется в строке состояния и выделяется щелчком, но popover не отображается.Objective-C Статус NSPopoverItem не открывается

Вот структура моего кода.

@property (strong, nonatomic) NSStatusItem *statusItem; 
@property (strong, nonatomic) NSEvent *popoverTransiencyMonitor; 
@property (weak, nonatomic) IBOutlet NSPopover *popover; 
@property (weak, nonatomic) IBOutlet NSView *popoverView; 


- (void)applicationDidFinishLaunching:(NSNotification *)aNotification { 
    self.statusItem = [[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength]; 
    self.statusItem.highlightMode = YES; 
    [self.statusItem.image setTemplate:YES]; 
    self.statusItem.action = @selector(itemClicked:); 
} 

-(void)itemClicked:(id)sender { 
    [[self popover] showRelativeToRect:[sender bounds] ofView:sender preferredEdge:NSMinYEdge]; 

    if (self.popoverTransiencyMonitor == nil) { 
     self.popoverTransiencyMonitor = [NSEvent addGlobalMonitorForEventsMatchingMask:(NSLeftMouseDownMask | NSRightMouseDownMask | NSKeyUpMask) handler:^(NSEvent* event) { 
      [NSEvent removeMonitor:self.popoverTransiencyMonitor]; 
      self.popoverTransiencyMonitor = nil; 
      [self.popover close]; 
     }]; 
    } 
} 

Мне нужна помощь другого человека на StackOverflow, Gavin, и эта помощь находится здесь. NSPopover transiency when popover is in status bar

Я потянулся к Гэвину, и он сумел помочь мне, отправив мне свой проект xCode, и это дало мне некоторое представление. Но наш код соответствует, мой не работает, и он это делает.

Любые идеи?

+0

Опишите, пожалуйста, ошибку. – Paco

+0

Насколько я могу судить, с кодом ничего не получается. Он просто не появляется, когда по какой-то причине щелкнут statusItem. Когда он щелкнут, он должен отправить уведомление и вызвать класс itemClicked. –

ответ

0

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

Извините за беспорядок.