2012-01-30 143 views
2

如何使NSCollectionView更新使用NSBox顯示當前選定的項目?在列表中顯示選擇看起來像是一件基本的事情,但我遇到了各種各樣的麻煩。使用NSBox突出顯示NSCollectionView中的選定項目

我讀過這個question,也看了一下蘋果的sample code。似乎有幾種方法可以做到這一點。

  1. 使用NSCollectionViewItem的子類和特殊的「原型視圖」。
  2. 使用NSBox

我希望使用NSBox的方式,因爲它看起來很簡單,也用於官方代碼示例。

alternegro下面的報價說明它顯然做到:

如果一個不同的背景顏色就足夠爲一大亮點,你可以 只需使用NSBox爲你收集項目視圖的根項目。 用您選擇的高光顏色填充NSBox。將NSBox 設置爲自定義,以便填充將起作用。將NSBox設置爲透明。

將NSBox的透明屬性綁定到文件所有者(Collection Item)的選定屬性 設置 透明綁定到NSNegateBoolean的值轉換器。

我被困在第一部分:「使用NSBox作爲您的根源項目(原文如此)集合項目視圖」。我試圖將「自定義類」更改爲從NSBox繼承的FoobarBox,但它似乎無助於我無法將背景顏色更改爲藍色,也無法綁定透明度。任何指針如何使選擇顯示在我的NSCollectionVuew將不勝感激。

回答

1

在Xcode 4.5。2,你可以直接刪除NSColletionView自動附帶的NSView,然後拖入一個NSBox(它將提供所有合適的綁定)。確保您將CollectionView重新綁定到新Box。

3

首先,爲您的ListView類,從NSBox繼承

@interface MyListViewBox : NSBox 

    @property (unsafe_unretained) IBOutlet NSCollectionViewItem *controller; 

@end 

然後,在Interface Builder中,指定我的截圖所示,你的類名稱爲「定製級」屬性

screenshot

然後你會意識到IB不會在GUI中顯示NSBox屬性或綁定(至少在版本4.5.2中),所以我決定以編程方式更改屬性。您N​​SBox子類(無效)awakeFromNib,加 -

  • 在NSBox子類創建NSCollectionViewItem出口(如上所示)
  • 使用IB到出口鏈接到您的NSCollectionItemView

  • 下面的代碼

    -(void)awakeFromNib { 
    
        //properties are not showing up in XCode Inspector IB view 
        //configuring the box here :-(
    
        self.boxType = NSBoxCustom; 
        self.borderType = NSLineBorder; 
        self.fillColor = [NSColor selectedControlColor]; 
    
        //bind the "transparent" property of NSBox to the "selected" property of NSCollectionViewItem controller 
        //controller is bound as IBOutlet in IB 
        NSValueTransformer* transformer = [NSValueTransformer valueTransformerForName:NSNegateBooleanTransformerName]; 
        [self bind:@"transparent" 
        toObject:self.controller 
        withKeyPath:@"selected" 
        options:[NSDictionary dictionaryWithObjectsAndKeys:transformer, NSValueTransformerBindingOption, nil]]; 
    } 
    
+0

感謝您深入研究。我試過你的解決方案,但它沒有顯示選定的項目。 – vidstige 2012-12-25 17:53:50

相關問題