2016-05-26 26 views
-2

我是可可開發中的全新人物,我不知道是否有可能通過熱鍵在任何位置顯示popover。 OS X字典應用程序非常接近理想的結果。我只想顯示彈出窗口,沒有光標位置的窗口。如果可能的話,你能否爲這個popover提供一些代碼?沒有窗口的可可popover

非常感謝。

回答

0

我爲了實驗目的做了這樣的事情。訣竅是創建一個具有透明背景或零大小的自定義無邊界窗口。

創建後,顯示&定位窗口,可以從中顯示彈出窗口。

對於窗口創建:
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 
    }) 
} 
+0

謝謝你,這幾乎是我想要的,但我想,當用戶點擊它(例如,酥料餅失去焦點)以外關閉此酥料餅。我會盡力弄清楚,但任何提示都表示讚賞。我得到了我的主要問題的答案:可以創建沒有可見窗口的彈出窗口IN GENERAL。 – gfarniev

+0

啊我只是忘了添加這段代碼(昨天很晚了)稍後會添加它 – mangerlahn

+0

謝謝。期待看看如何將焦點放在彈出窗口上,而不管它的內容如何(我可能只想在那裏顯示NSLabel,而不是任何類型的輸入小部件)。 – gfarniev