2013-12-09 55 views
0

我正在創建一個項目,我已經創建了一個.xib文件並希望加載在xib文件中創建的窗口。界面構建器:如何加載筆尖文件

我曾嘗試下面的代碼,但無濟於事:

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

    } 
    return self; 
} 

我打電話的initWithWindowNibName方法希望它會加載使用電流控制器相關聯的窗口。基本上,我在黑暗中投擲飛鏢!

對於如何將創建的筆尖與控制器進行基本關聯,我實際上並沒有什麼想法,因此上面的代碼實際上會加載窗口。我已經能夠關聯各種IBOutletsIBActions,但只是無法加載窗口。

我是不是走錯路或者是有特定的方法調用加載窗口?

編輯[super initWithWindowNibName: windowNibName]調用是NSWindowController這是該控制器類的超類。

+0

是什麼讓你相信你所提供的代碼不起作用? '[self window]'返回什麼? –

+0

@PeterHosey它返回'NSWindow'。但是,正如我在下面的答案中所提到的那樣,是否需要將該文件添加到項目設置的「Build Phases」部分中的「Copy Bundle Resources」? – Sankalp

+0

你告訴我返回類型,還是它沒有返回'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; 
} 
+0

在你的第一個代碼片段中,我認爲你的意思是'[[NSWindowController alloc] initWithWindowNibName:...]' – FluffulousChimp

+0

@NSBum是的,他的意思是隻有。 – Sankalp

+0

@Anoop Vaidya,@NSBum當我有一個'.xib'文件時,窗口的原因是不是'initWithWindowNibName'需要'.nib'文件的名字? – Sankalp

0

是否需要將文件添加到Xcode項目設置的Build Phases部分中的Copy Bundle Resources?

如果通過「文件」你的意思是筆尖,那麼是的。

您需要將它添加到複製捆綁軟件資源階段,以便將編譯後的nib放入捆綁軟件的Resources文件夾中。否則,Xcode將不會編譯您的xib,也不會將其放入您的bundle的Resources文件夾中。

如果你的筆尖是不是在你的包的資源文件夾,那麼你將無法從它加載任何東西。

你的筆尖添加到複製包資源階段最簡單的方法是選擇在Project Navigator筆尖,打開文件檢查器,然後選中您要使用筆尖目標。

當您創建新的筆尖(或包含筆尖的窗口控制器或視圖控制器)時,Xcode會提示您輸入此信息。最後一步是選擇將其添加到哪些目標。任何時候你創建一個新的筆尖(直接或作爲一個副作用),確保你檢查該列表,並確保選中正確的一組框。