界面生成器:如何加载 nib 文件
Posted
技术标签:
【中文标题】界面生成器:如何加载 nib 文件【英文标题】:Interface builder: how to load a nib file 【发布时间】:2013-12-09 08:25:31 【问题描述】:我正在做一个项目,我创建了一个.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
,这是这个控制器类的超类。
【问题讨论】:
是什么让您相信您提供的代码不起作用?[self window]
返回什么?
@PeterHosey 它返回一个NSWindow
。但是,正如我在下面的答案中所问的那样,我是否需要将文件添加到项目设置的 Build Phases
部分中的 Copy Bundle Resources
中?
你是告诉我返回类型,还是没有返回nil
?因为后者才是最重要的。
【参考方案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;
【讨论】:
在你的第一个代码 sn-p 中,我想你的意思是[[NSWindowController alloc] initWithWindowNibName:...]
@NSBum 是的,他只是那个意思。
@Anoop Vaidya, @NSBum 无法获得窗口的原因是initWithWindowNibName
需要.nib
文件的名称,而我有一个.xib
文件吗?
Nib 和 xib 不一样。 @Sankalp:您的 .xib 是源代码(在某种意义上); Xcode 从中生成一个 .nib。 nib 是您的应用将加载的内容。
@AnoopVaidya 我是否需要将文件添加到 Xcode 项目设置的 Build Phases
部分中的 Copy Bundle Resources
中?【参考方案2】:
我是否需要将文件添加到 Xcode 项目设置的 Build Phases 部分的 Copy Bundle Resources 中?
如果“文件”是指笔尖,那么是的。
您需要将其添加到 Copy Bundle Resources 阶段,以便将编译后的 nib 放入您的 bundle 的 Resources 文件夹中。否则,Xcode 将不会编译您的 xib,也不会将它的一个 nib 放在您包的 Resources 文件夹中。
如果您的 nib 不在捆绑包的 Resources 文件夹中,那么您将无法从中加载任何内容。
将 nib 添加到 Copy Bundle Resources 阶段的最简单方法是在 Project Navigator 中选择 nib,打开 File Inspector,然后选中要在其中使用 nib 的目标框。
当您创建一个新的 nib(或包含 nib 的窗口控制器或视图控制器)时,Xcode 会提示您输入此信息。最后的步骤之一是选择将其添加到哪些目标。每当您创建新笔尖(直接或作为副作用)时,请务必查看该列表并确保选中了正确的复选框。
【讨论】:
以上是关于界面生成器:如何加载 nib 文件的主要内容,如果未能解决你的问题,请参考以下文章