正在为状态栏打开一个 window OS X 10.10 应用程序
Opening a window for status bar OS X 10.10 application
我正在使用 Swift 1.2 和故事板开发状态栏 OS X 应用程序。
我的应用程序没有初始控制器,因为我不希望在应用程序启动时显示任何 windows。但是,如果应用程序尚未配置,我需要打开首选项 window。我该如何正确地做到这一点?现在我用 NSPopover
来做这件事,但这是一个丑陋的解决方案,并且没有提供良好的用户体验。
如果应用程序没有入口点、初始控制器,有没有办法打开 window 视图控制器?我有一种感觉,我的架构可能是错误的。谢谢。
import Cocoa
let kPreferences = "preferences"
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
@IBOutlet weak var statusMenu: NSMenu!
let popover = NSPopover()
var statusItem = NSStatusBar.systemStatusBar().statusItemWithLength(-2)
func applicationDidFinishLaunching(aNotification: NSNotification) {
syncronizeExcercises()
// Status menu icon
let button = statusItem.button
button!.image = NSImage(named: "statusIcon")
statusItem.menu = statusMenu
let defaults = NSUserDefaults.standardUserDefaults()
if let prefences = defaults.stringForKey(kPreferences) {
println(prefences)
} else {
let preferencesViewController = NSStoryboard(name: "Main", bundle: nil)?.instantiateControllerWithIdentifier("PreferencesViewController") as! PreferencesViewController
preferencesViewController.notConfigured = true
popover.contentViewController = preferencesViewController
popover.showRelativeToRect(button!.bounds, ofView: button!, preferredEdge: NSMinYEdge)
}
}
您始终可以手动加载 NSStoryboard
的实例(一些带有文件名的 init 方法)。然后您可以从该故事板中获取初始视图控制器并呈现它。你只需要在你的 sotryboard 编辑器中设置初始视图控制器,它应该像这样工作。
虽然这个问题我已经面对很久了,但是还是没有解决:我也想做这样一个应用,我用了我的方法,但是当你觉得要关闭的时候window 使用 CMD-Q 它实际上退出了应用程序(显然)
好吧,我最终创建了一个初始视图控制器,现在显示主要 window 以防应用程序已配置。
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
@IBOutlet weak var statusMenu: NSMenu!
var window: NSWindow?
let popover = NSPopover()
var statusItem = NSStatusBar.systemStatusBar().statusItemWithLength(-2)
func applicationDidFinishLaunching(aNotification: NSNotification) {
window = NSApplication.sharedApplication().windows.last! as? NSWindow
window!.close()
syncronizeExcercises()
// Status menu icon
let button = statusItem.button
button!.image = NSImage(named: "statusIcon")
statusItem.menu = statusMenu
let defaults = NSUserDefaults.standardUserDefaults()
if let prefences = defaults.stringForKey(kPreferences) {
println(prefences)
} else {
let preferencesViewController = window?.contentViewController as! PreferencesViewController
preferencesViewController.notConfigured = true
window?.makeKeyAndOrderFront(nil)
}
}
我正在使用 Swift 1.2 和故事板开发状态栏 OS X 应用程序。
我的应用程序没有初始控制器,因为我不希望在应用程序启动时显示任何 windows。但是,如果应用程序尚未配置,我需要打开首选项 window。我该如何正确地做到这一点?现在我用 NSPopover
来做这件事,但这是一个丑陋的解决方案,并且没有提供良好的用户体验。
如果应用程序没有入口点、初始控制器,有没有办法打开 window 视图控制器?我有一种感觉,我的架构可能是错误的。谢谢。
import Cocoa
let kPreferences = "preferences"
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
@IBOutlet weak var statusMenu: NSMenu!
let popover = NSPopover()
var statusItem = NSStatusBar.systemStatusBar().statusItemWithLength(-2)
func applicationDidFinishLaunching(aNotification: NSNotification) {
syncronizeExcercises()
// Status menu icon
let button = statusItem.button
button!.image = NSImage(named: "statusIcon")
statusItem.menu = statusMenu
let defaults = NSUserDefaults.standardUserDefaults()
if let prefences = defaults.stringForKey(kPreferences) {
println(prefences)
} else {
let preferencesViewController = NSStoryboard(name: "Main", bundle: nil)?.instantiateControllerWithIdentifier("PreferencesViewController") as! PreferencesViewController
preferencesViewController.notConfigured = true
popover.contentViewController = preferencesViewController
popover.showRelativeToRect(button!.bounds, ofView: button!, preferredEdge: NSMinYEdge)
}
}
您始终可以手动加载 NSStoryboard
的实例(一些带有文件名的 init 方法)。然后您可以从该故事板中获取初始视图控制器并呈现它。你只需要在你的 sotryboard 编辑器中设置初始视图控制器,它应该像这样工作。
虽然这个问题我已经面对很久了,但是还是没有解决:我也想做这样一个应用,我用了我的方法,但是当你觉得要关闭的时候window 使用 CMD-Q 它实际上退出了应用程序(显然)
好吧,我最终创建了一个初始视图控制器,现在显示主要 window 以防应用程序已配置。
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
@IBOutlet weak var statusMenu: NSMenu!
var window: NSWindow?
let popover = NSPopover()
var statusItem = NSStatusBar.systemStatusBar().statusItemWithLength(-2)
func applicationDidFinishLaunching(aNotification: NSNotification) {
window = NSApplication.sharedApplication().windows.last! as? NSWindow
window!.close()
syncronizeExcercises()
// Status menu icon
let button = statusItem.button
button!.image = NSImage(named: "statusIcon")
statusItem.menu = statusMenu
let defaults = NSUserDefaults.standardUserDefaults()
if let prefences = defaults.stringForKey(kPreferences) {
println(prefences)
} else {
let preferencesViewController = window?.contentViewController as! PreferencesViewController
preferencesViewController.notConfigured = true
window?.makeKeyAndOrderFront(nil)
}
}