问题
大概就是点击按钮后从现在的窗口上方向下弹出一个窗口,用来选择一下东西。最好能给个demo,谢谢了 。(问题来自:http://www.cocoachina.com/bbs/read.php?tid=1679520])
解决方案1:完全自由窗口
这种形式下,新打开的子窗口与父窗口相互独立,即使关闭父窗口子窗口也不会受到任何影响。
testWindowController * twc = [[testWindowController alloc] initWithWindowNibName:@"testWindowController"];
[twc showWindow:nil];
解决方案2:Modal Windows
子窗口被弹出时,父窗口会无法接收鼠标、键盘事件的响应。
实现代码如下:
[[NSApplication sharedApplication] runModalForWindow:twc.window];
解决方案3:Modal sessions
子窗口被弹出时,只有父窗口的菜单栏、快捷键等可以接收鼠标、键盘事件的响应。
实现代码如下:
sessionCode = [[NSApplication sharedApplication] beginModalSessionForWindow:twc.window];
附加说明
在所有的Modal形式下(Modal Windows和Modal Sessions),都需要在父窗口载入后监听windowWillClose方法,其代码如下:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(windowWillClose:)
name:NSWindowWillCloseNotification
object:nil];
并且在windowWillClose方法中停止Modal:
- (void)windowWillClose:(NSNotification *)notification {
[[NSApplication sharedApplication] stopModal];
if (sessionCode != 0) {
//窗口以Modal sessions启动时,停止session
[[NSApplication sharedApplication]endModalSession:sessionCode];
}
}
Demo运行图与下载地址
player2.gifhttps://github.com/gaoxiaodiao/mac_sample/tree/master/windowSample
网友评论