接口构建器:如何加载nib文件

时间:2013-12-09 08:25:31

标签: objective-c cocoa interface-builder nib

我正在开发一个项目,我创建了一个.xib文件,并希望加载在xib文件中创建的窗口。

我尝试过以下代码,但无济于事:

- (id) initWithWindowNibName: (NSString *) windowNibName
{
    self = [ super initWithWindowNibName: windowNibName];
    if ( self != nil )
    {
        [ self window ];

    }
    return self;
}

我正在调用initWithWindowNibName方法,希望它会加载与当前控制器关联的窗口。基本上,我在黑暗中投掷飞镖!

我实际上对如何基本上将创建的nib与控制器相关联以使上述代码实际加载窗口几乎一无所知。我已经能够关联各种IBOutletsIBActions,但却无法加载窗口。

我走错路还是有特定的方法调用加载窗口?

编辑[super initWithWindowNibName: windowNibName]调用是NSWindowController,这是此控制器类的超类。

2 个答案:

答案 0 :(得分:1)

你称之为:

self.myWindowController = [[NSWindowController alloc] initWithWindowNibName:@"NewWindow"];

然后你需要显示窗口:

[self.myWindowController showWindow:self]; //self or nil

或者如果您想将其加载为工作表:

[NSApp beginSheet: [self.myWindowController window]
   modalForWindow: self.window
    modalDelegate: self
   didEndSelector: @selector(sheetDidEnd:returnCode:contextInfo:)
      contextInfo: nil];

编辑:

- (id)initWithWindow:(NSWindow *)window
{
    self = [super initWithWindow:window];
    if (self) {
        ...//other initiliasation codes here
    }

    return self;
}

答案 1 :(得分:0)

  

我是否需要将文件添加到Xcode项目设置的Build Phases部分中的Copy Bundle Resources?

如果“文件”是指笔尖,那么是。

您需要将它添加到Copy Bundle Resources阶段,以便将已编译的nib放入bundle的Resources文件夹中。否则,Xcode将不会编译你的xib,也不会在你的bundle的Resources文件夹中放置它的nib。

如果您的笔尖不在您的软件包的Res​​ources文件夹中,那么您将无法从其中加载任何内容。

将nib添加到Copy Bundle Resources阶段的最简单方法是在Project Navigator中选择nib,打开File Inspector,然后选中要使用nib的目标框。

当您创建新笔尖(或包含笔尖的窗口控制器或视图控制器)时,Xcode会提示您输入此信息。最后一步是选择要将其添加到的目标。无论何时创建新笔尖(直接或作为副作用),请务必查看该列表并确保选中正确的方框。