Cocoa 静态显示一个对话框2 [帮大家复习一次]

来源:互联网 发布:mac桌面新建文件夹 编辑:程序博客网 时间:2024/05/22 05:13

第一步:

在你建立的工程里面:

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"])

    {

       returnnil;

    }

    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];

//    }


0 0