nScollectionView、Doubleクリックで表現された表現オブジェクトを送信する方法?
-
21-12-2019 - |
質問
私は私のエンティティ上の1つの関係を持つコアデータストアで初めてバインディングを使用しています、私はイメージとタイトルを示すnScollectionViewを使ってサブアイテムを表示します。
オブジェクトは次のとおりです。
Subitems Array Controller (NSArrayController)
Collection View Item (NSCollectionViewItem)
.
コントロールは次のとおりです。
NSCollectionView
NSView (for the item)
NSImageView
NSTextField
.
Model Key.ImagePathとValue Transformerとして、Model Key Pathを使用してNsimageViewをコレクションビューアイテムにバインドしました。これはすべてうまく機能します。
コード内の項目をダブルクリックして、ダブルクリックしたアイテムの表現オブジェクトにアクセスすることを検出したいのです。
私はNSIMageViewをサブクラス化しようとしました。私はこれを正しい方法で行う方法がわかりません。
助けてくれてありがとうございました、私はこれが基本的なものであることを理解しています、そして私はバインディングの実装に不正確なことをしている必要があります。
解決
コレクションビューアイテムのサブクラスを実装し、CustomCollectionViewItemを指定して、IBのコレクションビュー項目のクラスを変更します。
サブクラスNSIMageViewも、このクラスでダブルクリックを処理します。弱い参照デリゲートオブジェクトを作成し、このデリゲートをIBのCustomCollectionViewItemにバインドします。
今すぐダブルクリックすると、CustomCollectionViewItemとCustomCollectionViewItemのメソッドを呼び出して、代表オブジェクトにアクセスできます。
今、問題はこれを実際のコントローラクラスに渡す方法です。CustomCollectionViewItemに弱い参照デリゲートを作成し、このデリゲートをIBのメインコントローラクラスにバインドする必要があります。
そのため、CustomCollectionViewItemがNSimageViewサブクラスから呼び出しを受け取ると、メインコントローラクラスメソッドを呼び出して、表現オブジェクトを渡します。