2016-08-24 4 views
2

私は少しここで失ったよインスタンス化したことがない: 私はColorPickerのように振る舞ってボタンを作成しました:それをクリックすると、ポップオーバーでcollectionViewを示しています。 Iは最初のビュー+ collectionView(scrollView + clipViewとして埋め込まれた)を含有するニブFILでそれをやりました。 ものはうまく動作します。NSCollectionViewItem

nibファイルは非常に簡単です(と、プログラムでビューを設計する際に自分のコーディングスキルを向上させる)ように、私は、nibファイルを取り除くと、コード内の欠けている部分を書く取得することを決めました。 事は、私がcollectionViewの内容以外の仕事を得るために管理し、あります。

func collectionView(_ collectionView: NSCollectionView, itemForRepresentedObjectAt indexPath: IndexPath) -> NSCollectionViewItem 

データソースを管理することになっている、方法

collectionView.makeItem(withIdentifier: String, for: IndexPath) 

は動作しません:深い調査の後、メソッド内で、ことが表示されます。実際には、中:私は(ないゼロ、初期化されていない)にステップするとき、デバッガが言うように

let item = collectionView.makeItem(withIdentifier: ColorPickerPopover.itemIdentifier, for: indexPath) 

項目は、初期化されていません。どうやら、makeItemメソッドは、私が作ったサブクラスからcollectionViewItemをインスタンス化することはありません。 識別子は微細であり、両方のプロジェクトは、これらの点で同一であるようcollectionView.register機能は、単にペン先のバージョンと同様に、呼び出されます。 makeItem関数は、単にサブクラス化したNSCollectionViewItemのloadViewメソッドを呼び出しません。

ヒント?クラス

使用register(_:forItemWithIdentifier:)を使用して

(:

ジョシュ

collectionView.makeItem(withIdentifier:for:)方法で

答えて

1

には、最初にいずれかのクラスまたはコレクションビューのnibファイルを登録する必要があります最初のパラメータはAnyClass?を受け入れる)

collectionView.register(MyCustomCollectionViewItemSubclass.self, forItemWithIdentifier: "SomeId") 

Nibファイルを使用する

register(_:forItemWithIdentifier:)を使用します(最初のパラメータはNSNib?を受け入れます)。

let nib = NSNib(nibNamed: "MyCollectionViewItem", bundle: nil)! 
collectionView.register(nib, forItemWithIdentifier: "SomeId") 

重要なこと:あなたのnibファイルには、あなたもにあなたがシーンに追加NSCollectionViewItemを持っていることを確認しています。また、オブジェクトのクラスをサブクラスに設定する必要があります(インスペクタのパネルで設定できます)。

希望すると便利です。

関連する問題