第一步:
在你建立的工程里面:
Add Files:选择:
OX S-> Cocoa->Objective-C Class
(1)输入文件名(例如:Form_1)
(2)选中 with XIB
(3)下拉列表里面选择:Subclass of :NSWindowController
然后在Form_1.m里面输入:
/********************************************
Function : init (显示一个窗口,需要初始化)
[手动增加此函数]
*********************************************/
- (id)init
{
//以下的名称是*.xib文件的名称,扩展名不要写在里面(由于在添加窗口的时候,选中with xib就会增加一个同名的窗口文件)
if (![superinitWithWindowNibName:@"Form_1"])
{
return nil;
}
return self;
}
// 以下三个函数是为了在其他程序里可以显示本窗口 +++
// 显示窗口
- (IBAction)showWindow:(id)sender
{
[[NSApplicationsharedApplication] runModalForWindow:self.window];
}
// 关闭窗口:只有关闭了这个窗口,才会显示其他的窗口,达到静态显示本窗口非目的,否则不能显示为第一个窗口TOP
-(void)closeModalWindow:(id)sender
{
[[NSApplicationsharedApplication] stopModal];
}
// 作用同上
- (void)windowWillClose:(NSNotification *)notification
{
[selfperformSelectorOnMainThread:@selector(closeModalWindow:)withObject:nilwaitUntilDone:NO];
}
// 以下三个函数是为了在其他程序里可以显示本窗口 ---
接着:在调用的程序里面:
H里面要申明窗口变量
#import <Cocoa/Cocoa.h>
#import "Form_1.h" //一定要在这里引用
@interface EDUCATIONDocument :NSPersistentDocument
{
Form_1 *m_form1;//需要在这里申明变量
}
@end
在M的调用函数里面写入
- (IBAction)OnBT_ShowADialog:(id)sender
{
if(!m_form1)
{
m_form1 = [[Form_1alloc]init];//Test OK!
// m_form1 = [Form_1 new]; //Test OK!
//以上2种方法测试都OK!
}
[m_form1showWindow:sender];
}
完整的代码是
Form_1.h
#import <Cocoa/Cocoa.h>
@interface Form_1 : NSWindowController
@end
Form_1.m
#import "Form_1.h"
@interface Form_1 ()
@end
@implementation Form_1
// This function was created by XCode
- (id)initWithWindow:(NSWindow *)window
{
self = [super initWithWindow:window];
if (self) {
// Initialization code here.
}
return self;
}
// This function was created by XCode
- (void)windowDidLoad
{
[super windowDidLoad];
// Implement this method to handle any initialization after your window controller's window has been loaded from its nib file.
}
/********************************************
Function : init (显示一个窗口,需要初始化)
[手动增加此函数]
*********************************************/
- (id)init
{
//以下的名称是*.xib文件的名称,扩展名不要写在里面(由于在添加窗口的时候,选中with xib就会增加一个同名的窗口文件)
if (![super initWithWindowNibName:@"Form_1"])
{
return nil;
}
return self;
}
// 以下三个函数是为了在其他程序里可以显示本窗口 +++
// 显示窗口
- (IBAction)showWindow:(id)sender
{
[[NSApplication sharedApplication] runModalForWindow:self.window];
}
// 关闭窗口:只有关闭了这个窗口,才会显示其他的窗口,达到静态显示本窗口非目的,否则不能显示为第一个窗口TOP
-(void)closeModalWindow:(id)sender
{
[[NSApplication sharedApplication] stopModal];
}
// 作用同上
- (void)windowWillClose:(NSNotification *)notification
{
[self performSelectorOnMainThread:@selector(closeModalWindow:) withObject:nil waitUntilDone:NO];
}
// 以下三个函数是为了在其他程序里可以显示本窗口 ---
@end
调用代码如上已经写好。
在M文件里面
- (IBAction)OnBT_ShowADialog:(id)sender
{
if(!m_form1)
{
m_form1 = [[Form_1alloc]init];//Test OK!
// m_form1 = [Form_1 new]; //Test OK!
//以上2种方法测试都OK!
}
[m_form1showWindow:sender];
}
H文件里面申明#import <Cocoa/Cocoa.h>
#import "Form_1.h"
@interface EDUCATIONDocument :NSPersistentDocument
{
Form_1 *m_form1;
}
@end
以上代码经本人测试验证运行成功!
完!
补充:有时候掉用启动不起来,可以用这种方式调用
// if (m_form3 == nil)
// {
// m_form3 = [form3 new];
// [m_form3 showWindow:self];
// }
// else
// {
// [m_form3 showWindow:self];
// }