1

私は XCode が初めてで、まだ XCode を学習しています (現在 Xcode 4.5.2 を使用しています)。

IconCollectionに関する Apple のチュートリアルに基づいて、CollectionView データソースとして配列に格納された ImageMetada フィールドを使用して、一種のサムネイル ビュー アプリを作成しようとしています。

ここにいくつかの基本的な情報があります:

  1. 1 xib ファイル ( MainMenu.xib )
  2. メイン ビューにCollectionViewTableViewを含む 1 つのウィンドウ。
  3. Custom クラス Name : ThumbsViewControllerでウィンドウとアプリケーションを委譲する 1 つのオブジェクト コントローラ
  4. xib に配置された (メイン ウィンドウまたはそのサブビューではなく) コレクション アイテムの 1 つのカスタム ビューは、1 つの ImageView、1 つのラベル (テキスト フィールド)、および 2 つのボタンで構成されます。このビューは、カスタム クラスThumbViewItemを使用します。最初のボタンで日付情報を設定し、2 番目のボタンで削除します。私の目的は、現在のアイテムにマウスを置いたときです。最初のボタンはメタデータに日付情報が見つからない場合にのみ有効にし、2 番目のボタンはメタデータに日付情報が見つかった場合にのみ有効にする必要があります。それぞれのioutletThumbViewItem.hファイル ( imgpic、imglabel、imgbtn1、および imgbtn2 ) に設定しました。このアイデアは、Adobe Lightroom 4 の下部にある写真コレクションのサムネイル ビューに少し似ているかもしれません。
  5. ビュー アウトレットがThumbViewItem (4) に接続された NsCollectionViewItem と、ウィンドウのCollectionViewに接続された itemPrototype アウトレット (2)
  6. ThumbsViewController.h(3) で定義された pic とメタデータを含む画像情報への配列 ( imageInfos )。この配列を collectionview と tableview で使用するための共有配列として使用する予定です
  7. 配列に格納されるデータは、 imageinfo.hで定義されているimageinfoというインターフェイスです。サムネイル画像とメタデータ ディクショナリを配置しました。

テーブルは、ファイル名、パス、およびメタデータ (日付と GPS 情報) を含む配列に格納された情報を正しく表示できます。しかし、CollectionItem のカスタム ビューはそうではありません。画像も名前も情報もありません。

デバッグ時に、IBOutlet : imgpic、imglabel、imgbtn1、および imgbtn2 のそれぞれが null であることがわかりました。

すべての IBOutlet プロパティ/リンクが機能しなかったのはなぜですか?

私が忘れたことはありますか?

カスタム描画目的で collectionitem に関連付けられたカスタム ビューから imageinfos 配列に格納されている imageinfo を取得する方法は?

CollectionView ---> コレクション アイテム ---> カスタム ビュー

たとえば、インデックス番号 4 のコレクションアイテムに関連付けられたカスタムビューでカスタム描画を実行しているときに、そのインデックス (番号 4) を取得するにはどうすればよいですか?

インデックスを取得する私のコードは、そのスーパービューをコレクションビューとして取得し、次のようにスーパービューのサブビューでインデックスを取得することです:

-(NSInteger) getIndexInCollection 
{
    return [[[self superview] subviews] indexOfObject:self];
}

このコードの問題点は、機能する場合と機能しない場合があることです。

どんな助けでも大歓迎です。ありがとう。

4

1 に答える 1

0

NSCollectionview、IconViewPrototype.xib に関するドキュメントを読んで、単純なコードがいくつかのバインディングを使用していることに注意してください。Collection.xib では、IconViewPrototype.xib を使用してカスタム ビューを表示する方法を確認し、バインディングに従ってデータソースを取得する方法を確認する必要があります。

于 2013-01-04T07:19:38.187 に答える