Показать и скрыть окно вместо завершения приложения при закрытии щелчка в приложении какао - PullRequest
0 голосов
/ 05 февраля 2019

Я пытался показать скрытие окна при закрытии (красная кнопка) щелчка по окну.Я хотел бы сделать это, чтобы скрыть окно, и когда пользователь снова нажимает на мое приложение, оно будет отображаться снова.

Заранее спасибо всем разработчикам, предоставившим ответ.Я новичок в приложениях Какао.Я разработчик 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
    }
}

Я хочу создать приложение для таймера, которое будет работать в фоновом режиме, если пользователь нажимает на кнопку «Закрыть», он будет скрываться вместо завершения.и когда он снова щелкнет в меню док-станции, он снова откроет окно.

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

Я нашел решение.Благодаря предложению @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.Спасибо.

0 голосов
/ 05 февраля 2019

Я не сильно увлекаюсь разработкой Mac OS, но я думаю, что вы должны унаследовать от NSWindowController следующим образом:

class MyWindowController: NSWindowController, NSWindowDelegate {

    func windowShouldClose(_ sender: NSWindow) -> Bool {
        NSApp.hide(nil)
        return false
    }
}

Тогда вам просто нужно открыть свою раскадровку Main (или любое другое имя)выберите Window Controller и установите для него MyWindowController:

enter image description here

Я пытался, и это сработало для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...