【问题标题】:Loading a storyboard from menuitem in appdata从 appdata 中的 menuitem 加载情节提要
【发布时间】:2015-08-29 03:07:25
【问题描述】:

这一定比我想象的要简单得多。

我有一个在应用加载时启动的 Main.storyboard。我有一个系统菜单,其中一个菜单项需要加载情节提要对话框。

func applicationDidFinishLaunching(aNotification: NSNotification) {
    // Insert code here to initialize your application

    statusBarItem = statusBar.statusItemWithLength(-1)
    statusBarItem.menu = menu
    statusBarItem.title = "WP"


    var options = NSMenuItem(title: "Options ...", action: nil, keyEquivalent: "")
    var quit = NSMenuItem(title: "Quit", action: Selector("terminate:"), keyEquivalent: "q")

    menu.addItem(options)
    menu.addItem(quit)

}

选项变量“action”需要加载情节提要。我可以在 AppDelegate 中访问它吗?

【问题讨论】:

  • 当您说“加载情节提要”时,您的意思是要情节提要加载 NSWindowController(或子类)吗?
  • 它是故事板中的 NSWindowController。

标签: macos swift cocoa storyboard statusbar


【解决方案1】:

如果我理解正确,您的应用看起来完全是一个状态栏应用(启动时没有显示窗口?)。

所以基本上你会想要实例化然后打开窗口。也许是这样的?

在您的“applicationDidFinishLaunching”函数中:

    var menuItem : NSMenuItem = NSMenuItem()
    menuItem.title = "Options ..."
    menuItem.action = Selector("bringUpOptionsWindow:")
    menuItem.target = self
    menuItem.keyEquivalent = ""
    menuItem.enabled = true
    menu.addItem(menuItem)

// ...
// and then later on
// ...

func bringUpOptionsWindow(sender : AnyObject)
{
    let storyboard = NSStoryboard(name: "Main", bundle: nil)

    let myController = storyboard.instantiateControllerWithIdentifier("MyOptionsWindowController") as! NSWindowController

    myController.showWindow(sender)
}

【讨论】:

  • 实际上它有点工作。它出现然后立即消失。内存管理器可以清理它吗?
  • 如果我让控制器成为 appdata 成员,它可以工作!
猜你喜欢
  • 1970-01-01
  • 2012-11-23
  • 2015-12-31
  • 1970-01-01
  • 2013-05-18
  • 1970-01-01
  • 1970-01-01
  • 2013-05-09
  • 1970-01-01
相关资源
最近更新 更多