我正在开发一个项目,我创建了一个.xib
文件,并希望加载在xib文件中创建的窗口。
我尝试过以下代码,但无济于事:
- (id) initWithWindowNibName: (NSString *) windowNibName
{
self = [ super initWithWindowNibName: windowNibName];
if ( self != nil )
{
[ self window ];
}
return self;
}
我正在调用initWithWindowNibName
方法,希望它会加载与当前控制器关联的窗口。基本上,我在黑暗中投掷飞镖!
我实际上对如何基本上将创建的nib与控制器相关联以使上述代码实际加载窗口几乎一无所知。我已经能够关联各种IBOutlets
和IBActions
,但却无法加载窗口。
我走错路还是有特定的方法调用加载窗口?
编辑:[super initWithWindowNibName: windowNibName]
调用是NSWindowController
,这是此控制器类的超类。
答案 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。
如果您的笔尖不在您的软件包的Resources文件夹中,那么您将无法从其中加载任何内容。
将nib添加到Copy Bundle Resources阶段的最简单方法是在Project Navigator中选择nib,打开File Inspector,然后选中要使用nib的目标框。
当您创建新笔尖(或包含笔尖的窗口控制器或视图控制器)时,Xcode会提示您输入此信息。最后一步是选择要将其添加到的目标。无论何时创建新笔尖(直接或作为副作用),请务必查看该列表并确保选中正确的方框。