2

NSCollectionViewを使用して現在選択されているアイテムを表示するように更新するにはどうすればよいNSBoxですか?選択範囲をリストに表示することは基本的なことのように思えますが、私はこれに関してさまざまな問題を抱えています。

私はこの質問を読み、Appleのサンプルコードも調べました。これを行うにはいくつかの方法があるようです。

  1. のサブクラスNSCollectionViewItemと特別な「プロトタイプビュー」を使用します。
  2. を使用しNSBoxます。

NSBoxシンプルに見え、公式コードサンプルでも使われているので使いたいです。

これは、 alternegroによる次の引用で説明されているように明らかに行われています。

別の背景色でハイライトとして十分な場合は、コレクションアイテムビューのルートアイテムとしてNSBoxを使用できます。NSBoxに選択したハイライトカラーを入力します。塗りつぶしが機能するように、NSBoxをカスタムに設定します。NSBoxを透過に設定します。

NSBoxのtransparency属性をFileOwner(Collection Item)の選択された属性にバインドします。透過バインドの値トランスフォーマーをNSNegateBooleanに設定します。

私は最初の部分で立ち往生しています:「NSBoxをあなたの(原文のままの)コレクションアイテムビューのルートアイテムとして使用してください」。FoobarBox 「カスタムクラス」をから継承するに変更しようとしましたNSBoxが、背景色を青に変更したり、透明度をバインドしたりできないため、役に立たないようです。NSCollectionVuewで選択を表示する方法についてのポインタをいただければ幸いです。

4

2 に答える 2

3

まず、NSBoxから継承するListViewのクラスを作成します

 @interface MyListViewBox : NSBox

    @property (unsafe_unretained) IBOutlet NSCollectionViewItem *controller;

 @end

次に、Interface Builderで、スクリーンショットに示されているように、クラス名を「カスタムクラス」プロパティとして指定します

スクリーンショット

次に、IBがGUIにNSBoxプロパティまたはバインディングを表示しないことに気付くでしょう(少なくともバージョン4.5.2では)。そこで、プログラムでプロパティを変更することにしました。

  • NSBoxサブクラスにNSCollectionViewItemのアウトレットを作成します(上記を参照)
  • IBを使用して、アウトレットをNSCollectionItemViewにリンクします

  • NSBoxサブクラスの-(void)awakeFromNibに、次のコードを追加します

    -(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]];
    }
    
于 2012-12-23T15:12:31.907 に答える
1

XCode 4.5.2では、NSColletionViewに自動的に付属するNSViewを削除し、NSBoxにドラッグするだけです(適切なバインディングがすべて使用可能になります)。CollectionViewを新しいボックスに再バインドしてください。

于 2013-01-28T21:50:11.340 に答える