我一直试图在关闭(红色按钮)上单击以显示隐藏窗口。我想做的是隐藏窗口,当用户再次单击我的应用程序时,它将再次显示。
首先感谢所有提供答案的开发人员。我是可可应用程序的新手。我是iOS开发人员,所以我对可可应用程序了解不多。
我也尝试隐藏( :)方法和orderOut( :)方法。但不起作用。
class ViewController : NSViewController, NSWindowDelegates {
override func viewDidAppear() {
self.view.window?.delegate = self
}
func windowShouldClose(_ sender: NSWindow) -> Bool {
//NSApplication.shared.terminate(self)
//NSApp.hide(self)
//self.view.window?.orderOut(sender)
return false
}
}
我想创建一个计时器应用程序,如果用户单击关闭,它将在后台运行,它将隐藏而不是终止。然后当他再次从停靠菜单中单击时,它将重新打开窗口。
答案 0 :(得分:4)
我不太喜欢Mac OS的开发,但是我认为您应该像这样从NSWindowController
继承:
class MyWindowController: NSWindowController, NSWindowDelegate {
func windowShouldClose(_ sender: NSWindow) -> Bool {
NSApp.hide(nil)
return false
}
}
然后,您只需要打开Main(或您具有的任何名称)情节提要,选择Window Controller
并将MyWindowController
设置为它:
我尝试了,对我有用。
答案 1 :(得分:-1)
我找到了解决方案。感谢@Silvester建议呈现NSViewController。 按钮单击事件:
@IBAction func onButtonClick(_ sender: VSButton) {
let animator = ReplacePresentationAnimator()
let vc = self.storyboard?.instantiateController(withIdentifier: "identifier") as! yourVC
present(vc, animator: animator)
}
自定义动画师类:
class ReplacePresentationAnimator: NSObject, NSViewControllerPresentationAnimator {
func animatePresentation(of viewController: NSViewController, from fromViewController: NSViewController) {
if let window = fromViewController.view.window {
NSAnimationContext.runAnimationGroup({ (context) -> Void in
fromViewController.view.animator().alphaValue = 0
}, completionHandler: { () -> Void in
viewController.view.alphaValue = 0
window.contentViewController = viewController
viewController.view.animator().alphaValue = 1.0
})
}
}
func animateDismissal(of viewController: NSViewController, from fromViewController: NSViewController) {
if let window = viewController.view.window {
NSAnimationContext.runAnimationGroup({ (context) -> Void in
viewController.view.animator().alphaValue = 0
}, completionHandler: { () -> Void in
fromViewController.view.alphaValue = 0
window.contentViewController = fromViewController
fromViewController.view.animator().alphaValue = 1.0
})
}
}
}
这将与Silvester MyWindowController完美配合。谢谢。