我正在使用Swift 1.2和故事板开发状态栏OS X应用程序。
我的应用程序没有初始控制器,因为我不希望在启动应用程序时显示任何窗口。但是,如果尚未配置应用程序,我需要打开首选项窗口。我该怎么做呢?现在我用NSPopover
来做这件事,但这是一个丑陋的解决方案,并没有提供良好的用户体验。
有没有办法打开一个窗口,一个视图控制器,如果一个应用程序没有入口点,一个初始控制器?我觉得我的架构可能是错的。感谢。
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)
}
}
答案 0 :(得分:2)
好的,我最终创建了一个初始视图控制器,现在显示主窗口,以防配置应用程序。
@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)
}
}
答案 1 :(得分:1)
您始终可以手动加载NSStoryboard
的实例(某些带文件名的init方法)。然后,您可以从该故事板获取初始视图控制器并显示它。您只需在sotryboard编辑器中设置初始视图控制器,它应该像这样工作。
虽然我遇到了这个问题很长一段时间但仍然没有解决方案:我也想创建这样的应用程序,我使用了我的方法,但当你认为你想用CMD关闭窗口时问:它实际上退出了应用程序(显然)