Как я создаю окно Cocoa программно?

62
задан Sjoerd 18 September 2011 в 21:39
поделиться

3 ответа

Проблема состоит в том, что Вы не хотите звонить display, Вы хотите звонить или makeKeyAndOrderFront или orderFront в зависимости от того, хотите ли Вы, чтобы окно стало ключевым окном. Необходимо также, вероятно, использовать NSBackingStoreBuffered.

Этот код создаст Ваше безграничное, синее окно в левой нижней части экрана:

NSRect frame = NSMakeRect(0, 0, 200, 200);
NSWindow* window  = [[[NSWindow alloc] initWithContentRect:frame
                    styleMask:NSBorderlessWindowMask
                    backing:NSBackingStoreBuffered
                    defer:NO] autorelease];
[window setBackgroundColor:[NSColor blueColor]];
[window makeKeyAndOrderFront:NSApp];

//Don't forget to assign window to a strong/retaining property!
//Under ARC, not doing so will cause it to disappear immediately;
//  without ARC, the window will be leaked.

можно сделать отправителя для makeKeyAndOrderFront или orderFront независимо от того, что подходит для ситуации.

135
ответ дан Paulo Mattos 24 November 2019 в 16:34
поделиться

Попробуйте

[window makeKeyAndOrderFront:self]; 

вместо

[window display];

, это, к чему Вы стремитесь?

6
ответ дан Rich Catalano 24 November 2019 в 16:34
поделиться

Это - то, что я придумал меня:

NSRect frame = NSMakeRect(100, 100, 200, 200);
NSUInteger styleMask =    NSBorderlessWindowMask;
NSRect rect = [NSWindow contentRectForFrameRect:frame styleMask:styleMask];
NSWindow * window =  [[NSWindow alloc] initWithContentRect:rect styleMask:styleMask backing: NSBackingStoreBuffered    defer:false];
[window setBackgroundColor:[NSColor blueColor]];
[window makeKeyAndOrderFront: window];

Это отображает синее окно. Я надеюсь, что это - оптимальный подход.

2
ответ дан Steve McLeod 24 November 2019 в 16:34
поделиться