Ho scoperto come creare una finestra in Cocoa a livello di codice, ma non riesco a capire come reagire agli eventi. La finestra non reagisce a una richiesta di uscita o al clic del pulsante.Come posso creare una GUI e reagire agli eventi Cocoa a livello di programmazione?
Ho provato ad aggiungere il seguente controller e utilizzato setDelegate/setTarget senza fortuna:
@interface AppController : NSObject {
}
- (IBAction)doSomething:(id)sender;
@end
@implementation AppController
- (IBAction)doSomething:(id)sender;
{
printf("Button clicked!\n");
}
@end
int main(int argc, char **args){
NSRect frame = NSMakeRect(0, 0, 200, 200);
AppController *controller = [[AppController alloc] init];
> [[NSApplication sharedApplication] setDelegate:controller];
NSWindow* window = [[NSWindow alloc] initWithContentRect:frame
styleMask:NSBorderlessWindowMask|NSClosableWindowMask|NSMiniaturizableWindowMask|NSResizableWindowMask
backing:NSBackingStoreBuffered
defer:NO];
[window setBackgroundColor:[NSColor blueColor]];
NSButton *button = [ [ NSButton alloc ] initWithFrame: NSMakeRect(30.0, 20.0, 80.0, 50.0) ];
[ button setBezelStyle:NSRoundedBezelStyle];
[ button setTitle: @"Click" ];
> [ button setAction:@selector(doSomething:)];
> [ button setTarget:controller];
[ [ window contentView ] addSubview: button ];
[window makeKeyAndOrderFront:NSApp];
[[NSRunLoop currentRunLoop] run];
return 0;
}
Perché vuoi fare questo in primo luogo? In generale, è necessario utilizzare Interface Builder per creare l'interfaccia utente dell'applicazione. –
Sto creando una porta di un altro toolkit della GUI. –
@Chris: una ragione per me per esaminare la creazione della GUI programmatica è che carico un numero di oggetti con proprietà da un file, e devo rendere modificabili tutte le proprietà senza sapere al momento della compilazione quante sono, come sono etichettati e quale tipo di dati sono (float, int, NSString, NSPoint, ...). Anche se penso che ho solo bisogno di riempire una vista fittizia vuota dal momento che altri elementi dell'interfaccia utente sono statici. – LearnCocos2D