Macos 通过单击Swift中的按钮显示/隐藏窗口
我想通过单击主窗口中的按钮在swift中显示/隐藏窗口。Beginsheet正在显示窗口,但endsheet没有关闭窗口。我的appdelegate代码如下所示:Macos 通过单击Swift中的按钮显示/隐藏窗口,macos,swift,cocoa,nswindowcontroller,Macos,Swift,Cocoa,Nswindowcontroller,我想通过单击主窗口中的按钮在swift中显示/隐藏窗口。Beginsheet正在显示窗口,但endsheet没有关闭窗口。我的appdelegate代码如下所示: import Cocoa @NSApplicationMain class AppDelegate: NSObject, NSApplicationDelegate { @IBOutlet weak var window: NSWindow! func applicationDidFinishLaunching
import Cocoa
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
@IBOutlet weak var window: NSWindow!
func applicationDidFinishLaunching(aNotification: NSNotification) {
// Insert code here to initialize your application
}
func applicationWillTerminate(aNotification: NSNotification) {
// Insert code here to tear down your application
}
var settingsController: SettingsController?
@IBAction func inSettings(sender: NSObject?)
{
settingsController = SettingsController(windowNibName: "SettingsController")
window.beginSheet(settingsController!.window!, completionHandler: nil)
}
@IBAction func outSettings(sender: NSObject?)
{
window.endSheet(settingsController!.window!)
}
}
设置控制器:
import Cocoa
class SettingsController: NSWindowController {
override func windowDidLoad() {
super.windowDidLoad()
// Implement this method to handle any initialization after your window controller's window has been loaded from its nib file.
}
}
使用“结束页”结束文档模式工作表任务。像这样:
@IBAction func outSettings(sender: NSObject?)
{
settingsController!.window!.endSheet(settingsController!.window!)
}
编辑:您需要实际关闭调用orderOut的完成处理程序中的窗口,如下所示:
@IBAction func inSettings(sender: NSObject?)
{
settingsController = SettingsController(windowNibName: "SettingsController")
window.beginSheet(settingsController!.window!) {
settingsController!.window!.orderOut(nil)
}
}
Swift 3解决方案:
假设您有WindowA和WindowB。您想打开WindowB,但首先要隐藏WindowA。
使用segue连接windows。选择ShowasSeguesKind属性,您需要一个静态类来保持隐藏窗口。在WindowA中,重写应执行segue并将WindowA保持为静态NSWindow对象
override func shouldPerformSegue(withIdentifier identifier: String, sender: Any?) -> Bool {
YourStaticClass.WindowA = self.view.window
self.view.window?.orderOut(self)
return true
}
orderOutself隐藏窗口。然后WindowB将被打开
在WindowB的视图控制器中,使用功能关闭WindowB并显示隐藏的WindowA:
@IBAction func btnBack_Click(_ sender: NSButton) {
YourStaticClass.WindowA?.makeKeyAndOrderFront(YourStaticClass.WindowA)
self.view.window?.close()
}
@Devan不工作也没用。有错误吗?如果有,是哪一个?难道它什么都不做吗?请提供详细信息。@Aderstedt:我将您的代码复制到项目中,它显示:AppDelegate.swift:30:16:无法使用“NSWindow,->”类型的参数列表调用“beginSheet”:没有错误,但它什么也不做。endsheet应该关闭窗口,但它没有。除了beginsheet,还有其他方法从另一个窗口打开窗口吗?是的,有很多,看看它包含了所有东西。