我是可可開發中的全新人物,我不知道是否有可能通過熱鍵在任何位置顯示popover。 OS X字典應用程序非常接近理想的結果。我只想顯示彈出窗口,沒有光標位置的窗口。如果可能的話,你能否爲這個popover提供一些代碼?沒有窗口的可可popover
非常感謝。
我是可可開發中的全新人物,我不知道是否有可能通過熱鍵在任何位置顯示popover。 OS X字典應用程序非常接近理想的結果。我只想顯示彈出窗口,沒有光標位置的窗口。如果可能的話,你能否爲這個popover提供一些代碼?沒有窗口的可可popover
非常感謝。
我爲了實驗目的做了這樣的事情。訣竅是創建一個具有透明背景或零大小的自定義無邊界窗口。
創建後,顯示&定位窗口,可以從中顯示彈出窗口。
對於窗口創建:
Objective-C的
NSWindow* window = [[NSWindow alloc] initWithContentRect:windowRect styleMask:NSBorderlessWindowMask backing:NSBackingStoreBuffered defer:NO];
window.opaque = NO;
window.backgroundColor = [NSColor clearColor];
window.level = NSStatusWindowLevel;
window.accessibilityHidden = YES;
[window makeKeyAndOrderFront:nil];
[[NSApplication sharedApplication] activateIgnoringOtherApps:YES];
斯威夫特
window = NSWindow(contentRect: windowRect, styleMask: NSBorderlessWindowMask, backing: .Buffered, defer: true)
window.opaque = false
window.backgroundColor = NSColor.clearColor()
window.level = Int(CGWindowLevelForKey(.StatusWindowLevelKey))
window.setAccessibilityHidden(true)
window.makeKeyAndOrderFront(nil)
NSApplication.sharedApplication().activateIgnoringOtherApps(true)
而對於酥料餅:
Objective-C的
//Create popover ...
[popover showRelativeToRect:popoverRect ofView:window.contentView preferredEdge:NSMaxYEdge];
斯威夫特
//Create popover ...
popover.showRelativeToRect(popoverRect, ofView: window.contentView, preferredEdge: .MaxY)
爲了在屏幕上的某個地方,當點擊關閉該酥料餅,一個全球性的事件監視器已被添加:
Objective-C的 //添加全球監視器來跟蹤popover何時關閉 if(self.monitor == nil){self.monitor = {NSEvent addGlobalMonitorForEventsMatchingMask:(NSLeftMouseDownMask | NSRightMouseDownMask | NSKeyUpMask)處理程序:^(NSEvent * event){NSEvent removeMonitor:self.monitor]; self.monitor = nil; [self.popover close]; self.window = nil; }]; }
斯威夫特
if monitor == nil {
monitor = NSEvent.addGlobalMonitorForEventsMatchingMask([.LeftMouseDownMask, .RightMouseDownMask /* and others like keyDown/Up if you want*/], handler: { (event: NSEvent) in
NSEvent.removeMonitor(monitor!)
monitor = nil
popover.close()
window = nil
})
}
謝謝你,這幾乎是我想要的,但我想,當用戶點擊它(例如,酥料餅失去焦點)以外關閉此酥料餅。我會盡力弄清楚,但任何提示都表示讚賞。我得到了我的主要問題的答案:可以創建沒有可見窗口的彈出窗口IN GENERAL。 – gfarniev
啊我只是忘了添加這段代碼(昨天很晚了)稍後會添加它 – mangerlahn
謝謝。期待看看如何將焦點放在彈出窗口上,而不管它的內容如何(我可能只想在那裏顯示NSLabel,而不是任何類型的輸入小部件)。 – gfarniev