我的自定义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”时,即使我在Interface Builder中将其作为IBOutlet连接,其在控制台中也会跟踪“ null”。你能解释为什么吗?我应该怎么做呢?我还需要将“ fileURL”值传递给我的NSCollectionViewItem对象中的“ representedObject”,但是我不知道如何从这里访问它?

最佳答案

经过一天的故障排除,我终于达到了我所需要的。我的原始方法有几处错误:

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

2)我最初问题中的所有代码实际上应该放在NSCollectionViewItem的子类中,而不是NSView的子类中,由于我没有进行自定义绘制,因此我什至不需要这些代码。

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

10-04 19:48