对话框其实就是一个窗口,我们在interface builder新建一个xib文件,拖入一个window,然后设计我们的对话框,界面设计好后我们需要代码来控制对话框的行为,比如什么时候显示、什么时候隐藏以及一些事件响应等,这时就可以用到NSWindowController。
新建一个NSWindowController的子类DialogController,在interface bulider中将刚才新建的xib文件中的fileOwner设置为DialogController类型,拉线将FileOwner中window与对话框窗口关联,以及其他控件的关联,然后DialogController中添加你需要逻辑代码,这样一个完整的对话框设计就完成了。接着就可以在你程序的AppControlelr中调用你自定义的对话框了,定义一个DialogController类型的对像并初始化,如下:
DialogController* dialogCtl;
dialogCtl = [[DialogController alloc] initWithWindowNibName:@"DialogName"]; // DialogName 为你的xib文件名,不需要后缀
[dialogCtl loadWindow];
Mac中对话框显示方法有两种,一种跟windows的对话框一样,另一种为Sheet(卷帘式)对话框。
windows风格的对话框,分模态和非模态
非模态:[[dialogCtl window] makeKeyAndOrderFront:nil];
模态:[NSApp runModalForWindow:[dialogCtl window]];
sheet对话框都是模态对话框,显示方式:
NSApp beginSheet:[dialogCtl window]
modalForWindow:[NSApp mainWindow]
modalDelegate:nil
didEndSelector:nil
contextInfo:nil];
[NSApp runModalForWindow:[dialogCtl window]];
如果使用sheet方式的对话框,在对话框退出时,需要在DialogController中调用如下代码:
[[self window] orderOut:nil];
新建一个NSWindowController的子类DialogController,在interface bulider中将刚才新建的xib文件中的fileOwner设置为DialogController类型,拉线将FileOwner中window与对话框窗口关联,以及其他控件的关联,然后DialogController中添加你需要逻辑代码,这样一个完整的对话框设计就完成了。接着就可以在你程序的AppControlelr中调用你自定义的对话框了,定义一个DialogController类型的对像并初始化,如下:
DialogController* dialogCtl;
dialogCtl = [[DialogController alloc] initWithWindowNibName:@"DialogName"]; // DialogName 为你的xib文件名,不需要后缀
[dialogCtl loadWindow];
Mac中对话框显示方法有两种,一种跟windows的对话框一样,另一种为Sheet(卷帘式)对话框。
windows风格的对话框,分模态和非模态
非模态:[[dialogCtl window] makeKeyAndOrderFront:nil];
模态:[NSApp runModalForWindow:[dialogCtl window]];
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];
不然对话框虽然消失了但是主窗口依然处于模态状态下而不能响应,点击回出现“蹦蹦”的声音,你懂的。