どのようにして求めるのですかrepresentedObjectから、NSCollectionViewItem?
-
13-09-2019 - |
質問
私は見ることがで使用それぞれ多彩な製品。いIBOutletのCollectionViewItemから私としているのをよく覚のインターフェイスをビルダを構築します。たいへのアクセスから値をrepresentedObject(中核をなすデータオブジェクト)を示す。たとえばどのようにしているか--アクセスシーケンス値のrepresentedObject:
できます。hファイル:
IBOutlet NSCollectionViewItem *item; // Connected in IB
できます。mファイル
NSString *seq = [[item representedObject] valueForKey:@"seq"];
NSLog(@"Seq: %@", seq); // returns Seq: (null)
のを知っている配列番号が疎かで牲ラベルのCollectionViewItemュIBのrepresentedObject.配列番号キーパスことになる。
あらゆるアイデアかうアクセスに価値が配列番号のためのコードの場合はnullを返します?
解決
これはNSCollectionViewItemプロトタイプNSCollectionViewItemにそれらのアイテムのビューからIBOutlet接続を介してコピーしていない可能性が非常に高いです。したがって、item
がゼロであるので、seq
もゼロになります。
NSCollectionViewItemインスタンスにアクセスするための典型的なパターンは、プロトタイプに結合することです。あなたはこれをしなかったし、それが動作することをことを言及します。それはそれを行うための典型的な、サポートされている方法だというだけの理由それはある。
あなたが本当にバインディングを提供することができない方法で、アイテムへの直接接続が必要な場合は、、あなたはおそらくそれを手動で設定する必要があります。これを行う1つの方法は、スーパー、その後、手動で接続を行う呼び出し、NSCollectionViewItemの-copyWithZone:
を上書きされます。
他のヒント
1)コレクションビュー
の項目をレンダリングするために使用されるのNSViewのサブクラス2)このサブクラスにおいては、委任プロパティを追加
3)Sublcass NSCollectionViewItem
方法:4)setviewコマンドを上書き。 NSCollectionViewItemインスタンス(すなわち、自己)に対するビューのデリゲートプロパティを設定する行を追加。
さて、NSViewのサブクラス内、デリゲートのプロパティ(たとえば、あなたがそのrepresentedObjectにアクセスすることができます)を介して対応するNSCollectionView項目にアクセスする必要があります。
私は同じ問題を抱えていたが、非常に簡単な解決策を見つけた:私は別の.xibでビューを入れて、(実際NSViewControllerです)NSCollectionViewItemでこれをリンク。次いで.xibは、セル毎に逆シリアル化され、すべてのアウトレットが設定されます。
- サブクラスNSView.
- 追加委譲方法はサブクラス...のようなもの
- (void)mouseDownOnItemAtIndex:(NSUInteger)index
伝えるリスナーのユーザーをクリックした商品を特定のインデックス. - プルのコレクションビューを使用します。superview同じクラスです。を変えるNSUInteger.店内のインデックス項目の手法を用いることによって
[[collectionView subviews] indexOfObject:self]
.そのインデックスに委譲方法index
パラメータとします。 - のクラスに準じたプロトコルで定義されたNSView今後、これからmousedownイベントで特定の細胞です。ご希望の場合はrepresentedObjectの特定の項目は、コ
collectionView:itemAtIndex
の項目にアクセスでrepresentedObject
物件NSCollectionViewItem
.