問題
大概就是點(diǎn)擊按鈕后從現(xiàn)在的窗口上方向下彈出一個(gè)窗口国觉,用來選擇一下東西。最好能給個(gè)demo虾啦,謝謝了 麻诀。(問題來自:http://www.cocoachina.com/bbs/read.php?tid=1679520])
解決方案1:完全自由窗口
這種形式下,新打開的子窗口與父窗口相互獨(dú)立傲醉,即使關(guān)閉父窗口子窗口也不會(huì)受到任何影響蝇闭。
testWindowController * twc = [[testWindowController alloc] initWithWindowNibName:@"testWindowController"];
[twc showWindow:nil];
解決方案2:Modal Windows
子窗口被彈出時(shí),父窗口會(huì)無法接收鼠標(biāo)硬毕、鍵盤事件的響應(yīng)呻引。
實(shí)現(xiàn)代碼如下:
[[NSApplication sharedApplication] runModalForWindow:twc.window];
解決方案3:Modal sessions
子窗口被彈出時(shí),只有父窗口的菜單欄昭殉、快捷鍵等可以接收鼠標(biāo)苞七、鍵盤事件的響應(yīng)。
實(shí)現(xiàn)代碼如下:
sessionCode = [[NSApplication sharedApplication] beginModalSessionForWindow:twc.window];
附加說明
在所有的Modal形式下(Modal Windows和Modal Sessions)挪丢,都需要在父窗口載入后監(jiān)聽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啟動(dòng)時(shí),停止session
[[NSApplication sharedApplication]endModalSession:sessionCode];
}
}
Demo運(yùn)行圖與下載地址
player2.gif
https://github.com/gaoxiaodiao/mac_sample/tree/master/windowSample