2011-05-31 112 views
2

我想安裝一個NSCollectionView具有自定義繪圖在單獨的NSCollectionViewItem視圖。我有一張需要在每個視圖中繪製的圖像,但我無法將視圖鏈接回Interface Builder中的NSCollectionViewItem子類。是否有一個init方法可以與我的NSCollectionViewItem一起使用以執行初始化操作?我試圖實現copyWithZone,但是我做了一些錯誤的事情,因爲我得到了一些永恆的循環。目前,我發現使我的視圖連接的唯一機會是在選擇更改後使用 - (void)setSelected:(BOOL)標誌。我想在視圖中進行繪製,但我需要從我的RepresentObject中提取圖像作爲源。我讀過的所有與NSCollectionView相關的東西看起來都不完整。你如何初始化NSCollectionViewItem?

@implementation CollectionViewItem 
    -(void)setSelected:(BOOL)flag { 
     [super setSelected:flag]; 
     NSLog(@"setSelected: %d", flag); 
     // tell the view that it has been selected 
     [(CollectionViewItemView*)[self view] setSelected:flag]; 
     // This is where I pass my image to my view 
     [(CollectionViewItemView*)[self view] setOriginalSprite:[(MyModel*)self.representedObject imageSource]]; 
     [(CollectionViewItemView*)[self view] setNeedsDisplay:YES]; 
    } 
@end 
+0

... Mac OsX ??? – IAbstract 2011-05-31 23:15:55

回答

1

我發現這個文檔 - NSCollectionViewItem class

我發現什麼有顯示設置,像這樣的引用:

Setting the Represented Object 

    – representedObject Available in Mac OS X v10.5 through Mac OS X v10.5 
    – setRepresentedObject: Available in Mac OS X v10.5 through Mac OS X v10.5 

你的樣品: - (空)的setSelected:(BOOL)標誌

我不知道的語言,但是是BOOL一個ID?

setRepresentedObject:

接收機的表示對象 設置爲指定的模型對象。 (提供的Mac OS X v10.5中通過 的Mac OS X v10.5中。) - (無效)setRepresentedObject:(ID)對象 參數

對象

The receiver’s model object. 

狀況

Available in Mac OS X v10.5 through Mac OS X v10.5. 

宣稱NSCollectionView.h

注意:我在文檔中看到了這一點:

重要:在Mac OS X v10.5中,NSCollectionViewItem類的超類是NSObject。在Mac OS X v10.6及更高版本中,NSCollectionViewItem現在是NSViewController的一個子類。此更改是爲了改進在NSCollectionView中複製視圖的方式。 NSCollectionViewItem與前一個實現保持二進制兼容,正確處理unarchiving。

因此,如果您習慣於使用較舊的API,自上次做這些操作後可能會發生一些變化......

+0

我想我以前試過setRepresentedObject,但我一定是做錯了。它這次工作。謝謝! – David 2011-05-31 23:58:53

1

我無法將視圖鏈接回Interface Builder中的NSCollectionViewItem子類。

您應該將自定義視圖中的元素綁定到文件所有者(其類應該是CollectionViewItem)表示的對象。例如,您的圖像視圖將被綁定到文件所有者,模型關鍵路徑爲representedObject.imageSource

是否有一個init方法可以與我的NSCollectionViewItem一起使用以執行初始化操作?

NSCollectionViewItemNSViewController的子類。因此,您可以覆蓋-loadView以執行自定義初始化。例如,

@implementation CollectionViewItem 
… 
- (void)loadView { 
    [super loadView]; 
    self.someProperty = someDefaultValue; 
} 
… 
@end 
+0

我試過這個,但loadView永遠不會觸發。 – David 2011-05-31 23:58:26

+0

@David如果'-loadView'沒有被髮送,那麼在你的設置中有一些奇怪的東西。我在我的兩個項目中使用它,它工作得很好。如果您重寫'-awakeFromNib'和/或'-initWithNibName:bundle:'會發生什麼? – 2011-06-01 00:05:28

+2

我只是在嘗試使用NSCollectionView和NSCollectionViewItem,我相信loadView只會被調用一次 - 當應用程序啓動時。這是因爲(惱人地)NSCollectionView只創建一個NSCollectionView(當應用程序啓動時),然後每當需要爲CollectionView創建的新NSView創建一個新的NSView時,從此原型創建一個copyWithZone。 – 2011-07-25 19:35:52