我正在尝试为Mac制作SystemStatusBar
popover。 (粗略地说,将this Cocoa应用程序翻译成Swift应用程序)。但是,我正在使用的视图从不显示,弹出窗口显示在屏幕的左下角,复制StatusBarItem
。
这就是我所期望的(这个例子来自链接中的示例):
这是实际显示的(在我的应用程序的Swift版本中),而不是在StatusBar中显示的NSPopover
[显示或隐藏弹出窗口由两个按钮控制,如前所示数字。在这个截图中,我没有添加该窗口,因为它保持不变。]:
这是 AppDelegate :
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
@IBOutlet weak var window: NSWindow!
var statusView : StatusView!
var popController: PopViewController!
@IBAction func showPop(sender: NSButton)
{
statusView.showPopup()
}
@IBAction func hidePop(sender: NSButton)
{
statusView.hidePopup()
}
func applicationDidFinishLaunching(aNotification: NSNotification)
{
var height = NSStatusBar.systemStatusBar().thickness
statusView = StatusView(frame: NSMakeRect(0, 0, CGFloat(height), CGFloat(height)))
}
}
CustomView :
class StatusView : NSView, NSMenuDelegate
{
var imageView: NSImageView!
var statusItem: NSStatusItem!
var popover: NSPopover!
var popController: PopViewController!
required init? (coder: NSCoder)
{
super.init(coder: coder)
}
override init(frame frameRect: NSRect)
{
var height = NSStatusBar.systemStatusBar().thickness
imageView = NSImageView(frame: NSMakeRect(0, 0, CGFloat(height), CGFloat(height)))
statusItem = NSStatusBar.systemStatusBar().statusItemWithLength(CGFloat(height))
super.init(frame: frameRect)
imageView.image = NSImage(named: "mf-image-black.png")
self.addSubview(imageView)
statusItem.view = self
popover = NSPopover()
popController = PopViewController(nibName: "PopViewController", bundle: nil)
popController.view = self
popover.contentViewController = popController
}
func showPopup()
{
if(!popover.shown)
{
popover.showRelativeToRect(self.frame, ofView: self, preferredEdge: NSMinYEdge)
}
}
func hidePopup()
{
if(popover.shown)
{
popover.close()
}
}
}
和 ViewController :
class PopViewController: NSViewController
{
@IBOutlet var statusView: StatusView!
override init?(nibName: String?, bundle: NSBundle?) {
super.init(nibName: nibName, bundle: bundle)
}
required init?(coder: NSCoder)
{
super.init(coder: coder)
}
}
我不确定我在这里失踪的是什么。 StatusItem似乎永远不会使用PopViewController
笔尖。