【问题标题】:Objective-C NSPopover statusItem not openingObjective-C NSPopover statusItem 未打开
【发布时间】:2015-01-29 17:47:48
【问题描述】:

我很难让我的 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 项目发给了我,这让我有了一些见解。但是我们的代码匹配,我的不行,他的可以。

有什么想法吗?

【问题讨论】:

  • 你能详细描述一下你的代码有什么问题吗?
  • 据我所知,代码没有问题。由于某种原因单击 statusItem 时,它只是没有弹出。当它被点击时,它应该发送通知并调用 itemClicked 类。

标签: objective-c xcode macos nsstatusitem nspopover


【解决方案1】:

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

对不起,混乱。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-17
    • 2011-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多