xcode 如何在使用X关闭Mac桌面应用程序后重新打开它?

eanckbw9  于 2023-08-07  发布在  Mac
关注(0)|答案(4)|浏览(238)

我已经为Mac桌面创建了一个应用程序,它正在工作,但苹果拒绝了它,因为当我们运行应用程序并使用“X”关闭它时,我们不能重新打开它从码头虽然应用程序图标仍然存在,但它不打开应用程序再次和主要问题,我挣扎的是,“如果我们关闭应用程序,然后在菜单栏中没有打开它的选项”我看到的其他App都是这样做的。
我该怎么办?

eulz3vhy

eulz3vhy1#

以下是Swift 3的答案:
符合视图控制器类中的NSWindowDelegate。然后,覆写下列方法,隐藏 windows ,而不是关闭它。

self.view.window?.delegate = self

func windowShouldClose(_ sender: Any) -> Bool {
    NSApplication.shared().hide(self)
    return false
}

字符串
然后在停靠栏中单击应用程序图标时取消隐藏该应用程序。

func applicationDidBecomeActive(_ notification: Notification) {
    NSApplication.shared().unhide(self)
}

acruukt9

acruukt92#

要实现红色(x)按钮的简单显示/隐藏功能,也可以让您的App Delegate类成为主窗口的窗口代理。
然后向其中添加以下代码:

- (BOOL)windowShouldClose:(id)sender {
    [[NSApplication sharedApplication] hide:self];

    return NO;
}

- (void)applicationDidBecomeActive:(NSNotification *)notification {
    [[NSApplication sharedApplication] unhide:self];
}

字符串

ddhy6vgd

ddhy6vgd3#

我的两个证书Swift 5/Xcode 10
注意:你也可以在ViewController中调用这些方法(如果有用的话)来防止在NASWindow/NSView-Controllers之间分割代码。在这种情况下:

class ViewController: NSViewController, **NSWindowDelegate**
{

字符串
...

override func viewWillAppear() {
    // we choose to delegate ourselves. must be done here, in viewDidLoad window is nil
    let window = self.view.window
    window!.delegate = self
}


...
没有必要通过自我..:(就像上面的其他人一样。

func windowShouldClose(_ sender: NSWindow) -> Bool {

        NSApplication.shared.hide(nil)

        return false // prevent closing.
    }

    func applicationDidBecomeActive(_ notification: Notification) {
        NSApplication.shared.unhide(nil)
    }

5f0d552i

5f0d552i4#

答案很晚,但这就是我要做的。
首先,你应该为你的主窗口创建一个类,这样你就不必为每个控制器实现windowShouldClose

class BaseWindowController: NSWindowController, NSWindowDelegate {

    override func windowDidLoad() {
        super.windowDidLoad()
        contentViewController?.view.window?.delegate = self
    }
    
    func windowShouldClose(_ sender: NSWindow) -> Bool {
        NSApplication.shared.hide(nil)
        return false
    }
}

字符串
那么在Appdelegate中,应该像这样实现applicationDidBecomeActive

func applicationDidBecomeActive(_ notification: Notification) {
     NSApplication.shared.unhide(nil)
}


这是现在你将永远可以重新打开你的窗口。

相关问题