在下面的代码中,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];

10-06 02:43