自定义视图不会显示在状态栏中

时间:2014-11-30 10:07:25

标签: macos swift nsview nsviewcontroller nsapplication

我正在尝试为Mac制作SystemStatusBar popover。 (粗略地说,将this Cocoa应用程序翻译成Swift应用程序)。但是,我正在使用的视图从不显示,弹出窗口显示在屏幕的左下角,复制StatusBarItem

这就是我所期望的(这个例子来自链接中的示例): enter image description here

这是实际显示的(在我的应用程序的Swift版本中),而不是在StatusBar中显示的NSPopover [显示或隐藏弹出窗口由两个按钮控制,如前所示数字。在这个截图中,我没有添加该窗口,因为它保持不变。]:

enter image description here

这是 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笔尖。

0 个答案:

没有答案