1

我的自定义 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”值传递给“representedObject”,但我不知道如何从这里访问它?

4

1 回答 1

2

经过一天的故障排除后,我终于实现了我所需要的。我原来的方法有几个问题:

1) 在 NSCollectionView 中使用 NSTabView 似乎是个坏主意,因为绑定不会在“非活动”选项卡中初始化。我放弃了它并选择了 NSSegmentedControl,而不是手动显示/隐藏对象。

2)我原来的问题中的所有代码都应该真正进入 NSCollectionViewItem 的子类,而不是进入 NSView 的子类,因为我没有进行自定义绘图,所以我什至不需要它。

现在一切都很好。我在学。

于 2011-02-04T01:47:43.583 回答