如何以编程方式创build一个Cocoa窗口?

我的cocoa应用程序需要一些小的dynamic生成的窗口。 我怎样才能在运行时编程创buildcocoa窗口?

这是我迄今为止的非工作尝试。 我看不出任何结果。

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

问题是你不想调用display ,你想调用makeKeyAndOrderFront或者orderFront,这取决于你是否希望窗口成为关键窗口。 你也应该使用NSBackingStoreBuffered。

此代码将在屏幕左下angular创build无边界蓝色窗口:

 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创build发件人,适合您的情况。

一个侧面说明,如果你想编程实例化应用程序没有主要的笔尖,在main.m文件/你可以实例化AppDelegate如下。 然后在您的应用程序支持文件/ YourApp.plist 主笔尖基本文件/ MainWindow.xib删除此条目。 然后使用Jason Coco的方法在AppDelegates init方法中附加窗口。

 #import "AppDelegate.h": int main(int argc, char *argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; [NSApplication sharedApplication]; AppDelegate *appDelegate = [[AppDelegate alloc] init]; [NSApp setDelegate:appDelegate]; [NSApp run]; [pool release]; return 0; } 

尝试

 [window makeKeyAndOrderFront:self]; 

代替

 [window display]; 

这是你的目标?

这是我自己提出的:

 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]; 

这显示一个蓝色的窗口。 我希望这是最佳的方法。