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

Cra*_*gly 3 macos cocoa objective-c xcode4

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

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

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

如果那里的任何人可以帮助我解决这个问题,那么对于一天中最好的部分来说,我们会非常感激这一点(看似简单的任务).

提前致谢.

Ann*_*nne 10

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

ExampleAppDelegate.h

#import <Cocoa/Cocoa.h>

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

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

@end
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

MainMenu.xib

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

在此输入图像描述

结果

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