OS X 故事板:如何以编程方式显示 window?
OS X storyboard: how to show a window programmatically?
我正在创建一个 OS X 状态栏应用程序。
我正在努力实现以下目标:
- 应用程序开始时不可见,带有菜单栏项
- 点击菜单栏项目显示主window
- 停用时,window 被隐藏
因此,我尝试在单击菜单项时以编程方式显示主 window,但没有成功。
我的主要 window 已检查 "Hide on deactivate"。隐藏后,我无法使用代码使其再次可见。
这是我目前拥有的代码,但它不起作用:
@IBAction func menuClick(sender: AnyObject) {
var mainWindow = NSStoryboard(name: "Main", bundle: nil)?.instantiateInitialController()
mainWindow?.makeKeyAndOrderFront(self)
}
makeKeyAndOrderFront
方法是 NSWindow
方法,但是 instantiateInitialController
returns window 控制器,而不是它的 window。
此外,如果 window 在停用时隐藏,您将不想实例化另一个副本。保留对 window 的引用并重新显示。
最后,您可能还需要将应用程序置于最前面。调用 [NSApp activateIgnoringOtherApps:YES]
(或等效的 Swift)。
这是以编程方式显示 Windows 的方法:
import Cocoa
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
let mainWindow = NSWindow(contentRect: NSMakeRect(0, 0, NSScreen.mainScreen()!.frame.width/2, NSScreen.mainScreen()!.frame.height/2), styleMask: NSTitledWindowMask|NSResizableWindowMask|NSMiniaturizableWindowMask|NSClosableWindowMask, backing: NSBackingStoreType.Buffered, defer: false)
func createNewWindow(){
mainWindow.title = "Main Window"
mainWindow.opaque = false
mainWindow.center()
mainWindow.hidesOnDeactivate = true
mainWindow.movableByWindowBackground = true
mainWindow.backgroundColor = NSColor(calibratedHue: 0, saturation: 0, brightness: 1, alpha: 1)
mainWindow.makeKeyAndOrderFront(nil)
}
func applicationDidFinishLaunching(aNotification: NSNotification) {
// lets get rid of the main window just closing it as soon as the app launches
NSApplication.sharedApplication().windows.first!.close()
}
func applicationWillTerminate(aNotification: NSNotification) {
// Insert code here to tear down your application
}
@IBAction func menuClick(sender: AnyObject) {
createNewWindow()
}
}
或者您可以创建一个可选的 NSWindow var 来存储您的 window,然后按如下所示关闭它
import Cocoa
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
var defaultWindow:NSWindow?
func applicationDidFinishLaunching(aNotification: NSNotification) {
// lets get rid of the main window just closing it as soon as the app launches
defaultWindow = NSApplication.sharedApplication().windows.first as? NSWindow
if let defaultWindow = defaultWindow {
defaultWindow.close()
}
}
func applicationWillTerminate(aNotification: NSNotification) {
// Insert code here to tear down your application
}
@IBAction func menuClick(sender: AnyObject) {
if let defaultWindow = defaultWindow {
defaultWindow.makeKeyAndOrderFront(nil)
}
}
}
我正在创建一个 OS X 状态栏应用程序。
我正在努力实现以下目标:
- 应用程序开始时不可见,带有菜单栏项
- 点击菜单栏项目显示主window
- 停用时,window 被隐藏
因此,我尝试在单击菜单项时以编程方式显示主 window,但没有成功。
我的主要 window 已检查 "Hide on deactivate"。隐藏后,我无法使用代码使其再次可见。
这是我目前拥有的代码,但它不起作用:
@IBAction func menuClick(sender: AnyObject) {
var mainWindow = NSStoryboard(name: "Main", bundle: nil)?.instantiateInitialController()
mainWindow?.makeKeyAndOrderFront(self)
}
makeKeyAndOrderFront
方法是 NSWindow
方法,但是 instantiateInitialController
returns window 控制器,而不是它的 window。
此外,如果 window 在停用时隐藏,您将不想实例化另一个副本。保留对 window 的引用并重新显示。
最后,您可能还需要将应用程序置于最前面。调用 [NSApp activateIgnoringOtherApps:YES]
(或等效的 Swift)。
这是以编程方式显示 Windows 的方法:
import Cocoa
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
let mainWindow = NSWindow(contentRect: NSMakeRect(0, 0, NSScreen.mainScreen()!.frame.width/2, NSScreen.mainScreen()!.frame.height/2), styleMask: NSTitledWindowMask|NSResizableWindowMask|NSMiniaturizableWindowMask|NSClosableWindowMask, backing: NSBackingStoreType.Buffered, defer: false)
func createNewWindow(){
mainWindow.title = "Main Window"
mainWindow.opaque = false
mainWindow.center()
mainWindow.hidesOnDeactivate = true
mainWindow.movableByWindowBackground = true
mainWindow.backgroundColor = NSColor(calibratedHue: 0, saturation: 0, brightness: 1, alpha: 1)
mainWindow.makeKeyAndOrderFront(nil)
}
func applicationDidFinishLaunching(aNotification: NSNotification) {
// lets get rid of the main window just closing it as soon as the app launches
NSApplication.sharedApplication().windows.first!.close()
}
func applicationWillTerminate(aNotification: NSNotification) {
// Insert code here to tear down your application
}
@IBAction func menuClick(sender: AnyObject) {
createNewWindow()
}
}
或者您可以创建一个可选的 NSWindow var 来存储您的 window,然后按如下所示关闭它
import Cocoa
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
var defaultWindow:NSWindow?
func applicationDidFinishLaunching(aNotification: NSNotification) {
// lets get rid of the main window just closing it as soon as the app launches
defaultWindow = NSApplication.sharedApplication().windows.first as? NSWindow
if let defaultWindow = defaultWindow {
defaultWindow.close()
}
}
func applicationWillTerminate(aNotification: NSNotification) {
// Insert code here to tear down your application
}
@IBAction func menuClick(sender: AnyObject) {
if let defaultWindow = defaultWindow {
defaultWindow.makeKeyAndOrderFront(nil)
}
}
}