怎么做?我只是想加载一个窗口并将其显示在主窗口的前面。
NSWindowController* controller = [[NSWindowController alloc] initWithWindowNibName: @"MyWindow"];
NSWindow* myWindow = [controller window];
[myWindow makeKeyAndOrderFront: nil];
此代码显示窗口一会儿然后隐藏它。恕我直言这是因为我没有继续引用窗口(我使用ARC
)。 [NSApp runModalForWindow: myWindow];
完美无缺,但我不需要以模态方式显示它。
答案 0 :(得分:6)
是的,如果您没有对窗口的引用,那么当您退出所在的例行程序时,它会立即被拆除。您需要在ivar中对它进行强有力的引用。 [NSApp runModalForWindow: myWindow]
是不同的,因为只要NSApplication
对象以模态方式运行,它就会保存对窗口的引用。
答案 1 :(得分:1)
您应该执行与以下内容类似的操作,这会为您创建的strong
实例创建NSWindowController
引用:
·H:
@class MDWindowController;
@interface MDAppDelegate : NSObject <NSApplicationDelegate> {
__weak IBOutlet NSWindow *window;
MDWindowController *windowController;
}
@property (weak) IBOutlet NSWindow *window;
@property (strong) MDWindowController *windowController;
- (IBAction)showSecondWindow:(id)sender;
@end
的.m:
#import "MDAppDelegate.h"
#import "MDWindowController.h"
@implementation MDAppDelegate
@synthesize window;
@synthesize windowController;
- (IBAction)showSecondWindow:(id)sender {
if (windowController == nil) windowController =
[[MDWindowController alloc] init];
[windowController showWindow:nil];
}
@end
请注意,您可以使用makeKeyAndOrderFront:
的内置NSWindowController
,而不是将NSWindow
方法直接发送到NSWindowController
的{{1}}。方法
虽然上面的代码(以及下面的示例项目)使用showWindow:
的自定义子类,但您还使用通用NSWindowController
并使用NSWindowController
创建实例(只需确保文件的nib文件的所有者设置为initWithWindowNibName:
而不是像NSWindowController
这样的自定义子类。
示例项目: