MacOS 开发

来源:互联网 发布:域名ip隐藏 编辑:程序博客网 时间:2024/06/07 03:08

  • 一点击关闭时同时移除Dock上的图标
    • 方法一当关闭最后一个窗口时退出app
    • 方法二关闭窗口时退出程序
  • 二点击Dock栏重启
    • 1最小化和关闭窗口
    • 2实现 applicationShouldHandleReopen 方法
  • 三只显示状态栏图标不显示window
  • 四使用terminate命令关闭App
  • 五隐藏dock 上的图标


一、点击关闭时,同时移除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