我用堅持與如拿,放棄了那個東西 - 藍色圓圈在它從IB調色板白色邊框的視圖。我現在從代碼創建我的控制器,並且只通過文件所有者在IB中設置一個引用到擁有的控制器類:右鍵單擊文件所有者,在「身份」檢查器中輸入類名稱,然後從文件的所有者視圖連接到視圖。
在你的代碼,那麼你在適當的初始化點事:
[self setMyViewController = [[MyViewController alloc] initWithNibName: @"MyView" bundle: [NSBundle mainBundle]]
針對您的特殊情況下,當從它的筆尖加載你的窗口和做好工作的準備,這可能是在windowDidLoad
方法。然後,您可以將視圖添加到您的Windows內容視圖。你也可以考慮在視圖和視圖控制器之間有1:1的關係。它在維護方面讓生活變得更加輕鬆。
編輯:像@pcperini表明在他的評論,你可以使用調色板成分,但你仍然需要在你的代碼來實例化控制器。如果你想使用的調色板組件,在主控制器或AppDelegate中創建一個屬性:
@property (...) MyViewController *myViewController;
添加的代碼實際上是創建控制器(見上文)行。然後,使用綁定檢查器將選項板組件綁定到myViewController
屬性。
所以,你缺少的是你實際上沒有實例化控制器對象。編輯2:這裏是代碼(awakeFromNib是頂部控制器的方法)。它創建兩個子控制器,每個處理不同的子視圖:
- (void) awakeFromNib {
[[self startEndTopicHeader] setHeader: @"Event timeline boundary"];
[[self startDateHeaderView] setHeader: @"Event (start) date"];
[[self endDateHeaderView] setHeader: @"Event end date"];
[self setStartDateViewController: [[EventTimeViewController alloc] initWithNibName: @"EventTimeView" bundle: [NSBundle mainBundle]]];
[[[self startDateViewController] view] setFrame: [[self dummyStartView] bounds]];
[[self dummyStartView] addSubview: [[self startDateViewController] view]];
[[self startDateViewController] setParentController: self];
[self setEndDateViewController: [[EventTimeViewController alloc] initWithNibName: @"EventTimeView" bundle: [NSBundle mainBundle]]];
[[[self endDateViewController] view] setFrame: [[self dummyEndView] bounds]];
[[self dummyEndView] addSubview: [[self endDateViewController] view]];
[[self endDateViewController] setParentController: self];
}
從什麼引用'NSViewController'? – 2012-02-04 22:18:55
我將它添加到xib文件(拖放),然後將其類分配給我使用IB創建的類。右側有一個選項卡,可讓您設置其「文件所有者」。 – mtmurdock 2012-02-04 22:21:55
沒錯,但是如果你只是在'xib'中的任何地方放置一個對象,它不一定會渲染,特別是像'NSViewController'這樣的非View對象。你必須從代碼實例化NSViewController(在這種情況下,你的'xib'將把它作爲'File's Owner'來引用它),或者把它設置成你的ApplicationDelegate的'window'的'rootViewController' 。 – 2012-02-04 22:27:30