2011-02-03 60 views
1

我的自定義NSView中有一個NSTabView,用作NSCollectionView的原型。在第二個選項卡中,我有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」的痕跡,儘管我連它作爲IBOutlet中在Interface Builder「零」中的控制檯。你能解釋爲什麼嗎?我應該怎麼做呢?我還需要在我的NSCollectionViewItem對象中將「fileURL」值傳遞給「representationObject」,但我不知道如何從這裏訪問它?

回答

2

經過一天的解決,我終於實現了我所需要的。我的原始方法有兩個錯誤:

1)在NSCollectionView中使用NSTabView似乎是一個壞主意,因爲綁定不會在「非活動」選項卡中初始化。我放棄了這一點,並選擇了NSSegmentedControl,而不是手動顯示/隱藏對象。

2)我原來的問題中的所有代碼應該真正進入NSCollectionViewItem的子類,而不是NSView的子類,我甚至不需要,因爲我沒有做自定義繪圖。

現在都很好。我在學。

相關問題