在下面的代码中,CustomWindow是NSWindow的子类。
CustomWindow *window = [[CustomWindow alloc] init];
if (![NSBundle loadNibNamed:@"NibName" owner:window])
[window center]; // doesn't work
加载后如何获得一个控制XIB的指针,以便可以进行诸如将NSWindow居中放置的操作(我的意思是驻留在XIB内的序列化指针)?
我在这里做错了什么?
最佳答案
您应该使用NSWindowController
子类。 NSWindowController
经过专门设计,可以精确地实现您想要实现的目标,并解决了如果您使用NSBundle
方法直接加载 Nib 会遇到的一些问题。通常,您应该始终使用NSWindowController
子类来管理窗口。
创建NSWindowController
的子类:
@interface MyWindowController : NSWindowController {}
@end
@implementation MyWindowController
- (id)init
{
self = [super initWithWindowNibName:@"MyWindow"];
if(self)
{
//initialize stuff
}
return self;
}
//this is a simple override of -showWindow: to ensure the window is always centered
-(IBAction)showWindow:(id)sender
{
[super showWindow:sender];
[[self window] center];
}
@end
在Interface Builder中,将文件的所有者的类设置为
MyWindowController
,然后将文件的所有者的window
导出连接到 Nib 的window对象。然后,您可以通过执行以下操作显示窗口:
MyWindowController* controller = [[MyWindowController alloc] init];
[controller showWindow:self];