如何在启动时在Cocoa应用程序中打开一个新窗口

时间:2011-05-19 20:04:21

标签: objective-c cocoa macos xcode4

我创建了一个cocoa应用程序(不是基于文档的),并且具有默认的MyAppDelegate类和MainMenu nib文件。我还创建了一个新的nib,它包含一个名为Splash的窗口和一个名为SplashWindowController的窗口控制器类(NSWindowController)。

我想要的是,当应用程序启动而不是MainMenu nib窗口打开时,我想打开Splash窗口。

我认为我必须在AppDelegate类中创建一个SplashWindowController实例,然后实例化窗口并将其设置为前面。但是我尝试过几个方法,比如在我的AppDelegate类中包含对SplashWindowController.h文件的引用,以及向MainMenu nib添加一个对象,并将其类设置为SplashWindowController。但两者都没有运气。

如果那里的任何人可以帮助我解决这个问题,那么在一天中最好的时候,我们会非常感激这一点(看似简单的任务)。

提前致谢。

1 个答案:

答案 0 :(得分:9)

您可以简单地将两个窗口合并为一个.xib文件。

<强> ExampleAppDelegate.h

#import <Cocoa/Cocoa.h>

@interface ExampleAppDelegate : NSObject <NSApplicationDelegate> {
    IBOutlet id splash;
    IBOutlet id window;
}

- (IBAction)closeSplashButton:(id)sender;
- (void)closeSplash;

@end

<强> ExampleAppDelegate.m

#import "ExampleAppDelegate.h"

@implementation ExampleAppDelegate

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
    [NSTimer scheduledTimerWithTimeInterval:5.0
                                     target:self
                                   selector:@selector(closeSplash)
                                   userInfo:nil
                                    repeats:NO];    
}

- (IBAction)closeSplashButton:(id)sender {
    [self closeSplash];
}

- (void)closeSplash {
    [splash orderOut:self];
    [window makeKeyAndOrderFront:self];
    [NSApp activateIgnoringOtherApps:YES];
}

@end

<强> MainMenu.xib

  • 添加NSWindow(标题:Splash)
  • 将NSButton添加到Splash窗口
  • 将两个IBOutlet连接到相应的窗口
  • 将按钮连接到相应的IBAction
  • 启用“启动时可见”的启动窗口(使用“检查器”)
  • 在主窗口中禁用“启动时可见”(使用“检查器”)

enter image description here

<强>结果

启动时只能看到启动窗口。启动窗口会在10秒后自动关闭。用户可以通过按下按钮直接关闭启动窗口。关闭启动窗口后,主窗口会显示出来。