我在Cocoa开发方面是全新的,我想知道是否可以通过热键在任何位置显示popover。 OS X词典应用程序非常接近所需的结果。我想只显示popover,光标位置没有窗口。如果有可能,请为这个popover提供一些代码吗?
非常感谢你。
答案 0 :(得分:2)
我做了类似这样的事情用于实验目的。诀窍是创建一个透明背景或零尺寸的自定义无边框窗口。
创建,展示&定位窗口,可以从中显示弹出窗口。
窗口创建:
的目标C 强>
implicit class TLWrapper(t: TraversableLike[String,_]){
def show = t.mkString(t.stringPrefix + "(\"", "\", \"", "\")")
}
scala> List("red, green","yellow, blue").show
res10: String = List("red, green", "yellow, blue")
<强>夫特强>
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];
对于popover:
的目标C 强>
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)
<强>夫特强>
//Create popover ...
[popover showRelativeToRect:popoverRect ofView:window.contentView preferredEdge:NSMaxYEdge];
为了在点击屏幕上的某个位置时关闭弹出窗口,必须添加一个全局事件监视器:
<强>目标C 强> //添加全局监视器以跟踪何时应关闭弹出窗口 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; }]; }
<强>夫特强>
//Create popover ...
popover.showRelativeToRect(popoverRect, ofView: window.contentView, preferredEdge: .MaxY)