通常我正在制作 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];
}
在此之后,我想loadWindow:
在 windowController 中设置函数中的其他元素,如下所示:
- (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:
。他们去哪儿了?
请不要问我为什么不使用笔尖。我希望在内部制作一些高度定制的视图,可能是 OpenGL,所以我认为 nib 无法处理它。如果有人可以提供帮助,我将不胜感激。谢谢。
而且,谁知道如何以编程方式从头开始菜单项?
我正在使用最新的 Xcode。