Objective-C NSPopover statusItem无法打开

时间:2015-01-29 17:47:49

标签: objective-c xcode macos nsstatusitem nspopover

我很难让我的NSPopover正常运行。 statusItem会弹出状态栏,并在点击时突出显示,但弹出窗口不会显示。

这是我的代码结构。

@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

我联系了Gavin,他设法通过向我发送他的xCode项目帮助我,它给了我一些见解。但是我们的代码匹配,我的代码不起作用,而他的代码也是如此。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

这有点令人尴尬,但问题似乎是我创建了一个使用Storyboard的项目,NSPopover由于某种原因无法使用它。

抱歉杂乱无章。