我已经为 Mac 桌面创建了一个应用程序,它正在运行,但 Apple 拒绝了它,因为当我们运行该应用程序并使用“X”关闭它时,尽管应用程序图标仍然存在,但我们无法从 Dock 重新打开它但它没有再次打开应用程序,我正在努力的主要问题是“如果我们关闭应用程序,那么在菜单栏中没有打开它的选项”我见过的其他应用程序就是这样做的。
我应该怎么办?
我已经为 Mac 桌面创建了一个应用程序,它正在运行,但 Apple 拒绝了它,因为当我们运行该应用程序并使用“X”关闭它时,尽管应用程序图标仍然存在,但我们无法从 Dock 重新打开它但它没有再次打开应用程序,我正在努力的主要问题是“如果我们关闭应用程序,那么在菜单栏中没有打开它的选项”我见过的其他应用程序就是这样做的。
我应该怎么办?
这是 Swift 3 的答案:
符合视图控制器类中的 NSWindowDelegate 。然后通过覆盖以下方法隐藏窗口而不是关闭它。
self.view.window?.delegate = self
func windowShouldClose(_ sender: Any) -> Bool {
NSApplication.shared().hide(self)
return false
}
然后在停靠栏中单击应用程序图标时取消隐藏应用程序。
func applicationDidBecomeActive(_ notification: Notification) {
NSApplication.shared().unhide(self)
}
要为红色 (x) 按钮实现简单的显示/隐藏功能,请将您的 App Delegate 类也设为主窗口的窗口代理。
然后在其中添加以下代码:
- (BOOL)windowShouldClose:(id)sender {
[[NSApplication sharedApplication] hide:self];
return NO;
}
- (void)applicationDidBecomeActive:(NSNotification *)notification {
[[NSApplication sharedApplication] unhide:self];
}
我为 swift 5/Xcode 10 准备的 2 个证书
注意:您也可以在 ViewController 中调用这些方法(如果有用),以防止在 NASWindow/NSView-Controller 之间拆分代码。在这种情况下:
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)
}