7

私は新しいビューベースのNSTableViewを使ってMac OS X Lion用のアプリを開発しましたが、私はSnow Leopardにアプリ全体を移植したいので、このようなテーブルビューをエミュレートする最良の方法を見つけようとしています。これまではNSCollectionViewを作成しましたが、ボタンのクリックイベントがトリガーされるビューのインデックスを取得できないという点を除いて、すべて問題はありません。ライオンで 私は、以下の機能を持っている:NSCollectionView内のビューのインデックスを取得しますか?

- (IBAction)buttonClick:(id)sender 

ので、私はaViewで

- (NSInteger)rowForView:(NSView *)aView 

のように(私はその名前を思い出すことができない)メソッドを使用してテーブルビュー内のビューのインデックスを取得することができます送信者のスーパーであることが、私はコレクションビューのために類似した何かを見つけることができませんでした...唯一の「便利な」方法は

- (NSCollectionViewItem *)itemAtIndex:(NSUInteger)index 

(またはこのようなもの)のようですが、これはNSCollectionViewItemを返すので私には役に立たず、対応するビューだけを知ることさえできません!

答えて

4

、このコードを試してみてください。

id collectionViewItem = [sender superview]; 
NSInteger index = [[collectionView subviews] indexOfObject:collectionViewItem]; 
return index; 

・ホープ、このことができます:)

+1

私はそれを信じることはできません、それは動作するようです!私はこれを達成するのが最善であるとは確信していませんが(Appleはもっと良い方法を実装していたはずです)、とにかくこれが私の問題を解決します。どうもありがとうございます! – Nickkk

+1

警告の言葉:表示項目の順序が変更された後は、これはもう機能しません(ドラッグ&ドロップで並べ替えをサポートしている場合など)。 – Mark

1

どのようなものについて:buttonClick以内

id obj = [collectonViewItem representedObject]; 
NSInteger index = [[collectionView contents] indexOfObject:obj]; 
+0

私が言ったように、私はcollectonViewItemにアクセスすることはできませんそれを表すビューを知っている... – Nickkk

2

Geesh!これらのアプローチの両方に問題があります。どのように動作するかはわかりますが、 "collectionViewItem"は実際にはビューであり、ビューコントローラであるcollectionViewItemではなく、

ボタンをサブクラス化し、collectionViewItemへのバックリンクを挿入しない限り、2番目の方法は機能しません。それ以外の場合は、viewによってcollectionViewItemがどのようにコントロールされているかがわかりません。配列内の正しいオブジェクトにアクションを取得するには、collectionViewItemの代わりにセレクタバインディングを使用する必要があります。

0

私はここで示唆したように:How to handle a button click from NSCollectionView

を(あなたが押したいボタンが対応するモデル、したがって表されるオブジェクトを結合する必要があるため)、私はこのようにそれを行うだろう:

  1. 追加コレクションアイテムの表示
  2. にごcollectionViewItem(例えばbuttonClicked)
  3. バインドのモデルボタンのターゲットへのメソッドに設定モデルキーパスを結合しながら:representedObject
  4. あなたが以前に選択したsetname:methodnameにバインドしている間(例: buttonClicked)
  5. あなたは
0
  1. NSCollectionViewに結合するために使用NSArrayControllerは、カスタムを取得する

  2. 使用collectonViewItem.representedObjectオブザーバーパターンをデリゲートを伝えるか、確立しなければならない場合は、お使いのモデルにプロトコルを追加します。自分で定義したモデル。

  3. カスタムモデルに保存してインデックスを取得します。

それは私のために働いています。

関連する問題