通常我制作iOS应用程序,但现在我尝试制作OS X应用程序,但是一开始就迷失了。我的iOS应用程序的风格完全是以编程方式为主,没有xib文件或类似的东西,因为通过键入可以更加自由地控制。然而,在OS X编程中,需要从一些带有菜单项和默认窗口的xib文件开始。菜单项中有很多项目,所以这可能不是我想要处理的东西,但我想通过编程自己创建第一个窗口。
所以我做了这件事:
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
NSUInteger windowStyleMask = NSTitledWindowMask|NSResizableWindowMask|NSClosableWindowMask|NSMiniaturizableWindowMask;
NSWindow* appWindow = [[NSWindow alloc] initWithContentRect:NSMakeRect(200, 200, 1280, 720) styleMask:windowStyleMask backing:NSBackingStoreBuffered defer:NO];
appWindow.backgroundColor = [NSColor lightGrayColor];
appWindow.minSize = NSMakeSize(1280, 720);
appWindow.title = @"Sample Window";
[appWindow makeKeyAndOrderFront:self];
_appWindowController = [[AppWindowController alloc] initWithWindow:appWindow];
[_appWindowController showWindow:self];
}
所以在这里,我首先创建了一个窗口,并使用该windowController来初始化此窗口。窗口以这种方式显示,但我只能在此处指定内部元素,如按钮和标签,而不是在windowController中指定。这让我感到很糟糕,所以我尝试了另一种方法。
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
_appWindowController = [[AppWindowController alloc] init];
[_appWindowController showWindow:self];
}
之后我想在 windowController 的 loadWindow:
函数中设置其他元素,如下所示:
- (void)loadWindow
{
[self.window setFrame:NSMakeRect(200, 200, 1280, 720) display:YES];
self.window.title = @"Sample window";
self.window.backgroundColor = [NSColor lightGrayColor];
NSButton* sampleButton = [[NSButton alloc] initWithFrame:NSRectFromCGRect(CGRectMake(100, 100, 200, 23))];
sampleButton.title = @"Sample Button!";
[sampleButton setButtonType:NSMomentaryLightButton];
[sampleButton setBezelStyle:NSRoundedBezelStyle];
[self.window.contentView addSubview:sampleButton];
NSLog(@"Loaded window!");
[self.window makeKeyAndOrderFront:nil];
}
很遗憾,这从未起作用。 loadWindow:
从未被调用,也没有 windowDidLoad:
。它们去哪了?
请不要问我为什么不使用nib。我希望在里面制作一些高度定制的视图,可能是OpenGL,所以我认为nib无法处理它。如果有人能帮忙,我将不胜感激。谢谢。
而且,谁知道如何从头开始以编程方式启动菜单项?
我正在使用最新的Xcode。