Передача значений из пользовательского NSView в NSCollectionViewItem
У меня есть 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 ответ
Я наконец достиг того, что мне было нужно после дня устранения неполадок. В моем первоначальном подходе было несколько ошибок:
1) Использование NSTabView внутри NSCollectionView представляется плохой идеей, поскольку привязки не инициализируются на "неактивных" вкладках. Я отказался от этого и выбрал вместо этого NSSegmentedControl с ручным показом / скрытием объектов.
2) Весь код в моем исходном вопросе должен идти внутри подкласса NSCollectionViewItem, а не в подкласс NSView, который мне даже не нужен, так как я не делаю пользовательское рисование.
Теперь все хорошо. Я учу.