欢迎来到java研究网!
快捷搜索:  搜索热词1  搜索热词2  搜索热词3  

MacOS 开发 - 窗口的关闭、重启

 

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

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

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

实现appdelegate 的方法 applicationShouldTerminateAfterLastWindowClosed

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

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

1、设置window的delegate.

NSWindowDelegate

2、实现代理方法 windowShouldClose

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

二、点击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;
} 
		
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

三、只显示状态栏图标,不显示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);
} 
		
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

四、使用terminate命令,关闭App

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

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

    [[NSApplication sharedApplication] terminate:self];
} 
		
  • 1
  • 2
  • 3
  • 4
  • 5

状态栏及设置目录方法,可参考: 
- 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

http://blog.csdn.net/lovechris00/article/details/78143104?locationNum=8&fps=1


您可能还会对下面的文章感兴趣: