2010-08-25 71 views
0

我想爲我的NSCollectionViewItem在視圖內放置一個自定義控件。NSCollectionViewItem中的自定義控件

可以說我有一個名爲BoxesView.BoxesView一個自定義的NSView僅僅是繪製在它看來箱的預定數量的視圖。在init方法中設置了這些盒子的數量。比方說,我把它設置爲8

當我加載了集合視圖,視圖做工精細的所有其他控件(按鈕,滑塊等),但我認爲不會畫。

如果我在BoxesView的drawRect方法設置斷點它表明的箱子吸引數爲0!如果我在init方法中設置了一個斷點,並將numBoxes設置爲8,則表明numBoxes實際上設置爲8.此外,即使集合視圖中存在多行,init方法也只會被調用1次。

我在做什麼錯?

UPDATE

我能夠通過設置itemPrototype從廈門國際銀行,而不是在同一廈門國際銀行作爲NSCollectionViewItem被加載到得到這個工作。這很好,除了它只能在10.6而不是10.5下工作。

更新2

我想要做的,就是堅持已經存在了已經存在的NSCollectionViewItem認爲在我的自定義視圖。會發生什麼情況是成員變量mBoxWidth被吹走並且爲零,所以當它繪製它時,什麼都不會發生。

@implementation DumbView 

- (id)initWithFrame:(NSRect)frame { 
    self = [super initWithFrame:frame]; 
    if (self) { 
     mBoxWidth = 3; 
    } 
    return self; 
} 

- (void)drawRect:(NSRect)dirtyRect { 
    NSRect bounds = self.bounds; 
    [[NSColor redColor]set]; 
    [NSBezierPath fillRect:NSMakeRect(bounds.origin.x, bounds.origin.y, mBoxWidth, mBoxWidth)]; 
} 

@end

+0

你指的是什麼類的'init'方法?從哪裏發送'init'消息?你是否證實你正在檢查集合視圖項目中同一視圖的numBoxes屬性? – 2010-08-25 15:40:18

+0

我在談論BoxesView init方法。它正在被我的控制器中的一個加載的筆尖調用。控制器是NSCollectionView的所有者 – Randall 2010-08-25 17:52:09

+0

請編輯您的問題以包含您用於設置集合視圖,加載項目視圖以及創建和設置集合視圖項目的代碼。 – 2010-08-26 00:37:33

回答

1

我沒有實現initWithCoder。這解決了一切。

0

NSCollectionViewItem使用原型視圖,其被複制和有線了用於集合的表示的對象的每個項目。

可以經歷所有的麻煩,使一個IBPlugin爲您的自定義視圖(一個公開numberOfBoxesToDraw綁定),但是這是在屁股疼痛,有一個更簡單的方法:手動綁定。

使用手動綁定與NSCollectionView /項目

首先,subclcass NSCollectionViewItem,告訴IB使用這個新的子類,並確保它有一個出口(如BoxView中的)連接到您的自定義視圖。

接着,子類NSCollectionView(組IB以使用該子類),並覆蓋-newItemForRepresentedObject:。在其中,您將首先調用super(將結果存儲到本地變量),然後使用您在模型中使用的「numberOfBoxes」鍵手動將「boxView」的多個框綁定到表示的對象。

+0

問題的最終結果是,我給予我的成員值的默認值全部清零。所以任何布爾值都是NO,任何浮點數都是0.0,其他所有值都是0. 我試着做你說的,我最終在同一個地方。 – Randall 2010-08-25 19:46:45

+0

然後,我建議儘可能多地爲您的問題添加更多的細節。目前還不清楚你在做什麼。 – 2010-08-25 19:47:49

0

您是否嘗試過重載copyWithZone?

我猜你的物品正在複製,而不是直接init'd。