Dowiedziałem się, jak stworzyć program w kakao programowo, ale nie wiem, jak reagować na zdarzenia. Okno nie reaguje na żądanie Quit lub kliknięcie przycisku.Jak programowo można utworzyć GUI i reagować na zdarzenia Cocoa?
Próbowałem dodając następujący sterownik i używane setDelegate/SetTarget bez powodzenia:
@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;
}
Dlaczego chcesz to zrobić w pierwszej kolejności? Generalnie powinieneś używać Interface Builder do tworzenia ludzkiego interfejsu aplikacji. –
Tworzę port innego zestawu narzędzi GUI. –
@Chris: jednym z powodów dla mnie, aby przyjrzeć się programowemu tworzeniu GUI, jest to, że ładuję wiele obiektów z właściwościami z pliku, i muszę sprawić, aby wszystkie właściwości były edytowalne bez znajomości w czasie kompilacji ile ich jest, jak są one etykietowane i jaki to typ danych (float, int, NSString, NSPoint, ...). Chociaż myślę, że muszę wypełnić tylko pusty atrapa, ponieważ inne elementy interfejsu użytkownika są statyczne. – LearnCocos2D