美文网首页MacOSmacOS开发备忘录
【已解决】在Mac OS X中点击按钮弹出新窗口怎么弄?

【已解决】在Mac OS X中点击按钮弹出新窗口怎么弄?

作者: 拳战攻城师 | 来源:发表于2018-10-08 11:40 被阅读493次

    问题

    大概就是点击按钮后从现在的窗口上方向下弹出一个窗口,用来选择一下东西。最好能给个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.gif

    https://github.com/gaoxiaodiao/mac_sample/tree/master/windowSample

    参考链接

    https://blog.csdn.net/lovechris00/article/details/77922445

    相关文章

      网友评论

        本文标题:【已解决】在Mac OS X中点击按钮弹出新窗口怎么弄?

        本文链接:https://www.haomeiwen.com/subject/lhudaftx.html