• Cocoa使用自定义对话框的方法


    概述

         对话框其实就是一个窗口,我们在interface builder新建一个xib文件,拖入一个window,然后设计我们的对话框,界面设计好后我们需要代码来控制对话框的行为,比如什么时候显示、什么时候隐藏以及一些事件响应等,这时就可以用到NSWindowController。

         新建一个NSWindowController的子类:setPasswordDlg,在interface bulider中将刚才新建的xib文件中的fileOwner设置为setPasswordDlg类型,拉线将FileOwner中的插座变量window与对话框窗口关联,以及其他控件的关联,然后setPasswordDlg中添加你需要逻辑代码,这样一个完整的对话框设计就完成了。接着就可以在你程序的AppControlelr中调用你自定义的对话框了,定义一个setPasswordDlg类型的对像并初始化,如下:

    setPasswordDlg* dialogCtl;
    dialogCtl = [[setPasswordDlg alloc] initWithWindowNibName:@"setPasswordDlg"];  // DialogName 为你的xib文件名,不需要后缀
    [setPasswordDlg loadWindow];

    Mac中对话框显示方法有两种,一种跟windows的对话框一样,另一种为Sheet(卷帘式)对话框。

    windows风格

         windows风格的对话框,分模态和非模态

        非模态:[[dialogCtl window] makeKeyAndOrderFront:nil];

        模态:[NSApp runModalForWindow:[dialogCtl window]]; 在对出的时候调用  [NSApp stopModal];

    卷帘风格

    sheet对话框都是模态对话框,显示方式:

    NSApp beginSheet:[dialogCtl window]
           modalForWindow:[NSApp mainWindow]
            modalDelegate:nil
           didEndSelector:nil
              contextInfo:nil];
    [NSApp runModalForWindow:[dialogCtl window]];

    如果使用sheet方式的对话框,在对话框退出时,需要在DialogController中调用如下代码:

    [NSApp stopModal];
    [NSApp endSheet:[self window]];
    [[self window] orderOut:nil];

    不然对话框虽然消失了但是主窗口依然处于模态状态下而不能响应。

  • 相关阅读:
    学号20162305 2017-2018-1 《程序设计与数据结构》第8周学习总结
    20162316刘诚昊 实验五-数据结构综合应用
    2017-2018-1 20162316刘诚昊 实验四 图与应用
    20162316刘诚昊 第十一周学习总结
    2017-2018-1 20162316刘诚昊 实验三 查找与排序
    20162316刘诚昊 第九周学习总结
    20162316刘诚昊 队列课下作业
    20162316刘诚昊 《程序设计与数据结构》 第七周学习总结
    20162316刘诚昊 用数组实现循环队列
    20162316刘诚昊 用链表实现队列
  • 原文地址:https://www.cnblogs.com/watchdatalearn2012620/p/2876884.html
Copyright © 2020-2023  润新知