2011-02-03 4 views
1

NSCollectionViewのプロトタイプとして使用される独自のNSView内にNSTabViewがあります。 2番目のタブにはNSButtonボタンとNSImageViewオブジェクトがあります。カスタムNSViewからNSCollectionViewItemへの値の受け渡し

NSButtonはNSOpenPanelをトリガーする「参照」ボタンです。

私は次のことを実行MyCustomViewでIBActionにボタンのセレクタを接続している:私はこれを実行すると

// MyView.h 

@interface MyView : NSView 
{ 
    IBOutlet NSTabView *tabView; 
    IBOutlet NSImageView *myImageView; 
    IBOutlet NSButton *browseButton; 
} 

-(IBAction)openBrowseDialog:(id)sender; 


@end 


// MyView.m 

-(IBAction)openBrowseDialog:(id)sender 
{ 

    NSOpenPanel* openDlg = [NSOpenPanel openPanel]; 

    [openDlg setCanChooseFiles:YES]; 
    [openDlg setCanChooseDirectories:NO]; 
    [openDlg setAllowsMultipleSelection:NO]; 
    [openDlg setAllowedFileTypes:[NSArray arrayWithObjects:@"png", @"jpg", @"jpeg", @"gif", nil]]; 


    if ([openDlg runModal] == NSOKButton) 
    { 

     NSArray* files = [openDlg URLs]; 
     NSURL* fileURL = [files objectAtIndex:0]; 
     NSData *imageData = [NSData dataWithContentsOfURL:fileURL]; 

     if(imageData != nil) 
     { 
      NSImage *image = [[NSImage alloc] initWithData:imageData]; 
      myImageView.image = image; 
      [image release]; 
     } 

    } 

} 

「myImageViewは、」私は、Interface BuilderでIBOutletとして、それを接続していてもコンソールに「ヌル」をトレースし。理由を説明できますか?代わりにこれをどうすればいいですか?私はまた、NSCollectionViewItemオブジェクト内の "ファイルオブジェクト"の値を "fileURL"に渡す必要がありますが、ここからアクセスする方法はわかりません。

答えて

2

私は最終的にトラブルシューティングの日後に必要なものを達成しました。

1)NSCollectionViewでNSTabViewを使用すると、「非アクティブ」タブでバインディングが初期化されないため、悪い考えです。私はそれを廃止し、代わりにNSSegmentedControlを手動で表示/非表示にしました。

2)元の質問のコードはすべて、NSViewのサブクラスではなくNSCollectionViewItemのサブクラスに入るはずです。NSViewのサブクラスではありません。カスタム描画をしていないからです。

今はすべていいです。勉強中です。

関連する問題