Objective-C NSPopover statusItem 未打开
Objective-C NSPopover statusItem not opening
我很难让我的 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];
}];
}
}
我从 Whosebug 上的另一个人 Gavin 那里得到了帮助,该帮助位于此处。 NSPopover transiency when popover is in status bar
我联系了 Gavin,他通过将他的 xCode 项目发送给我来帮助我,这给了我一些见解。但是我们的代码匹配,我的不行,他的不行。
有什么想法吗?
这有点尴尬,但问题似乎是我创建了一个使用故事板的项目,而 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];
}];
}
}
我从 Whosebug 上的另一个人 Gavin 那里得到了帮助,该帮助位于此处。 NSPopover transiency when popover is in status bar
我联系了 Gavin,他通过将他的 xCode 项目发送给我来帮助我,这给了我一些见解。但是我们的代码匹配,我的不行,他的不行。
有什么想法吗?
这有点尴尬,但问题似乎是我创建了一个使用故事板的项目,而 NSPopover 出于某种原因无法使用它。
抱歉打扰了。