当前位置:  开发笔记 > IOS > 正文

如何以编程方式创建Cocoa窗口?

如何解决《如何以编程方式创建Cocoa窗口?》经验,为你挑选了3个好方法。

我的Cocoa应用程序需要一些动态生成的小窗口.如何在运行时以编程方式创建Cocoa窗口?

到目前为止,这是我的非工作尝试.我看不到任何结果.

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

Jason Coco.. 135

问题是你不想打电话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.

您可以让发件人makeKeyAndOrderFrontorderFront任何适合您的具体情况.



1> Jason Coco..:

问题是你不想打电话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.

您可以让发件人makeKeyAndOrderFrontorderFront任何适合您的具体情况.


不要担心选民杰森.我发现你的答案很有帮助.
只是对那些发现我的答案的人感到好奇/如此/无益于将其投票......为什么它无益?
我认为ARC与我的窗户无法显示的原因有关.

2> johndpope..:

另请注意,如果要在main.m文件中以编程方式实例化没有主nib的应用程序,则可以如下所示实例化AppDelegate.然后在您的应用程序Supporting Files/YourApp.plist 主nib基本文件/ 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;
}


哇谢谢.长期搜索这个答案.完善!使用新的Objective-C 3.0更好地使用@autorelease {...}

3> Rich Catalan..:

尝试

[window makeKeyAndOrderFront:self]; 

代替

[window display];

那是你的目标吗?

推荐阅读
虎仔球妈_459
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有