我的自定义NSView中有一个NSTabView,用作NSCollectionView的原型。在第二个选项卡中,我有NSButton按钮和NSImageView对象。
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”跟踪“null”时,即使我在Interface Builder中将其连接为IBOutlet。你能解释一下原因吗?我应该怎么做呢?我还需要在我的NSCollectionViewItem对象中将“fileURL”值传递给“representObject”,但我不知道如何从这里访问它?
答案 0 :(得分:2)
经过一天的故障排除后,我终于实现了我所需要的。我最初的方法有几个问题:
1)在NSCollectionView中使用NSTabView似乎是一个坏主意,因为绑定不会在“非活动”选项卡中初始化。我废弃了它并选择了NSSegmentedControl而不是手动显示/隐藏对象。
2)我原来问题中的所有代码都应该放在NSCollectionViewItem的子类中,而不是NSView的子类中,我甚至不需要它,因为我不做自定义绘图。
现在一切都很好。我正在学习。