Descubrí cómo crear una ventana en Cocoa programáticamente pero no puedo encontrar la manera de reaccionar. La ventana no está reaccionando a una solicitud Salir o al hacer clic en un botón.¿Cómo puedo crear una GUI y reaccionar a los eventos de Cocoa programáticamente?
He intentado añadir el siguiente controlador y utiliza setDelegate/setTarget sin suerte:
@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;
}
¿Por qué quieres hacer esto en primer lugar? En general, debe utilizar Interface Builder para crear la interfaz humana de su aplicación. –
Estoy creando un puerto de otro kit de herramientas GUI. –
@Chris: una razón para que investigue la creación de GUI programática es que cargué varios objetos con propiedades de un archivo, y tengo que hacer que todas las propiedades sean editables sin saber en tiempo de compilación cuántas hay, cómo están etiquetados y qué tipo de datos son (float, int, NSString, NSPoint, ...). Aunque creo que solo necesito completar una vista falsa vacía ya que otros elementos de la interfaz de usuario son estáticos. – LearnCocos2D