macOS 开发 - NSWindow 窗口的关闭、重启

版权声明:本文为博主原创文章,转载请附上本文链接地址。from : https://blog.csdn.net/lovechris00 https://blog.csdn.net/lovechris00/article/details/78143104


一、点击关闭时,同时移除Dock上的图标

运行成功点击关闭后,Dock上还会显示图标。使用下面方法可以彻底关闭和移除。

方法一:当关闭最后一个窗口时,退出app

实现appdelegate 的方法 applicationShouldTerminateAfterLastWindowClosed

- (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)sender{
        return YES;//YES-窗口程序两者都关闭,NO-只关闭窗口;
}

方法二:关闭窗口时,退出程序

1、设置window的delegate.

NSWindowDelegate

2、实现代理方法 windowShouldClose

#pragma mark - NSWindowDelegate
-(BOOL)windowShouldClose:(id)sender {
    [self.mainWindowC.window orderOut:nil];//窗口消失
    exit(0);
    return NO;
}

二、点击Dock栏重启

如果不想向上面一样,点击关闭就直接关闭全部。还想点击dock后能够重启App,可以使用下面方法:

1、最小化和关闭窗口

  • 如果在窗口的标题栏,点击最小化,那么点击dock上该程序的图标,程序会自动跳出来,并带有动画样式。

  • 如果在标题栏点击关闭,点击dock,程序不会自动跳出来,这时候,需要在delegate.m 中实现 applicationShouldHandleReopen:hasVisibleWindows: 方法。


2、实现 applicationShouldHandleReopen: 方法

  • 在该方法中,返回 YES ,点击dock,就会显示主窗口。注意,要把你的主窗口作为delegate中的属性。
  • 点击最小化后,点击dock上该应用图标,hasVisibleWindows = 1;打开的效果,是带有动画的效果。
  • 点击关闭后,点击dock上该应用图标,hasVisibleWindows = 0;打开的效果,是重启的样式,没有动画
-(BOOL)applicationShouldHandleReopen:(NSApplication *)sender hasVisibleWindows:(BOOL)flag
{
    NSLog(@"hasVisibleWindows:%d",flag);
    [NSApp activateIgnoringOtherApps:NO];//取消其他程序的响应
    [self.mainWindowC.window makeKeyAndOrderFront:self];//主窗口显示自己方法一
    //[_mainWindow orderFront:nil];           //主窗口显示自己方法二
    return YES;
}

三、只显示状态栏图标,不显示window

参考:http://www.jianshu.com/p/bd801d926314

1、移除delegate.m 中对window的调用;
2、将 project - general - main interface 的入口清空;
3、在 main.c 文件中 #import "AppDelegate.h";
4、修改 int main 方法
5、在delegate.m 中添加状态栏 NSStatusItem 信息,可参考:
- MacOS 开发 - 状态栏 NSStatusBar & NSStatusItem
http://blog.csdn.net/lovechris00/article/details/78011718

int main(int argc, const char * argv[]) {

    NSApplication *app = [NSApplication sharedApplication];
    id delegate = [[AppDelegate alloc]init];
    app.delegate = delegate;

    return NSApplicationMain(argc, argv);
}

四、使用terminate命令,关闭App

如果我们的APP 没有window,却有状态栏,可以在状态栏的菜单(menu)中设置关闭方法

- (void)load1{
    NSLog(@"load1 ---- ");

    [[NSApplication sharedApplication] terminate:self];
}

状态栏及设置目录方法,可参考:
- MacOS 开发 - 状态栏 NSStatusBar & NSStatusItem
http://blog.csdn.net/lovechris00/article/details/78011718

状态栏中退出程序


五、隐藏dock 上的图标

参考:https://mikulove.com/2017/05/02/macOS-xue-xi-bi-ji-yin-cang-dock-lan-tu-biao/

在info.plist 最后一栏输入 LSUIElement,选择YES即可。key会自动生成。

LSUIElement


阅读更多

扫码向博主提问

lovechris00

博客专家

爱拼才会赢
  • 擅长领域:
  • iOS
  • macOS
去开通我的Chat快问
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页