He estado tratando de mostrar la ventana oculta al cerrar (botón rojo), haga clic en la ventana. Lo que me gustaría hacer es ocultar la ventana y cuando un usuario vuelva a hacer clic en mi aplicación, se volverá a mostrar.
Gracias de antemano a todos los desarrolladores que den una respuesta. Soy nuevo en las aplicaciones Cocoa. Soy desarrollador de iOS, por lo que no tengo mucho conocimiento sobre las aplicaciones de cacao.
Traté de ocultar ( :) método y orderOut ( :) método también. pero no funciona.
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 } }Quiero crear una aplicación de temporizador que se ejecute en segundo plano si el usuario hace clic en cerrar, se ocultará en lugar de finalizar. y cuando vuelva a hacer clic en el menú del muelle, volverá a abrir la ventana.
No me gusta mucho el desarrollo de Mac OS, pero creo que deberías heredar de NSWindowController así:
class MyWindowController: NSWindowController, NSWindowDelegate { func windowShouldClose(_ sender: NSWindow) -> Bool { NSApp.hide(nil) return false } } Luego, solo necesita abrir su guión gráfico principal (o el nombre que tenga), elegir Window Controller y configurar su MyWindowController en él:
Probé y funcionó para mí.
He encontrado solución. Gracias a la sugerencia de @Silvester de presentar NSViewController. En el evento de clic de botón:
@IBAction func onButtonClick(_ sender: VSButton) { let animator = ReplacePresentationAnimator() let vc = self.storyboard?.instantiateController(withIdentifier: "identifier") as! yourVC present(vc, animator: animator) }Clase de animador personalizado:
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 }) } } }Esto funcionará perfectamente con Silvester MyWindowController. Gracias.