Usually I am making iOS app but now I am trying to make an OS X app, and I am lost at the very beginning. Say the style I make the iOS apps are totally programmatic, there's no xib files or whatsoever just because that I have a lot more control by typing than dragging. However in OS X programming, it starts with some xib files with the menu items and a default window. There are quite a lot of items in the menu items so that's probably not something I want to mess around, but I want to programmatically create my first window myself.
So I did this:
- (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]; } So here, I have created a window first, and use that windowController to init this window. The window does show up in this way, but I can only specify the inner elements, like buttons and labels here, but not in the windowController. It makes me feel bad so I tried another way.
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification { _appWindowController = [[AppWindowController alloc] init]; [_appWindowController showWindow:self]; } and after this I want to set the other elements in the loadWindow: function in the windowController like this:
- (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]; } Unfortunately, this never works. the loadWindow: never gets called, nor windowDidLoad:. Where did they go?
And please don't ask why I don't use nibs. I wish to make some highly customized views inside, possibly OpenGL, so I don't think nibs can handle it. I am greatly appreciated if anyone could help. Thanks.
And also, who knows how to even start the menu items from scratch, programmatically?
I am using the latest Xcode.
