Передача значений из пользовательского NSView в NSCollectionViewItem - PullRequest
1 голос
/ 03 февраля 2011

У меня есть NSTabView внутри моего собственного NSView, который используется в качестве прототипа для NSCollectionView. Во второй вкладке у меня есть кнопка NSButton и объекты NSImageView.

NSButton - это кнопка «Обзор», которая запускает NSOpenPanel.

Я подключил селектор кнопки к IBAction в MyCustomView, который выполняет следующее:

// 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 в Интерфейсном Разработчике. Не могли бы вы объяснить, почему? Как я должен сделать это вместо этого? Мне также нужно передать значение «fileURL» в «presentObject» в моем объекте NSCollectionViewItem, но я не знаю, как получить к нему доступ отсюда?

1 Ответ

2 голосов
/ 04 февраля 2011

Я наконец-то достиг того, что мне было нужно после дня устранения неполадок. В моем первоначальном подходе было несколько ошибок:

1) Использование NSTabView внутри NSCollectionView представляется плохой идеей, поскольку привязки не инициализируются на «неактивных» вкладках. Я отказался от этого и выбрал вместо этого NSSegmentedControl с ручным показом / скрытием объектов.

2) Весь код в моем исходном вопросе должен идти внутри подкласса NSCollectionViewItem, а не в подкласс NSView, который мне даже не нужен, поскольку я не делаю пользовательское рисование.

Теперь все хорошо. Я учусь.

...