カスタムnsviewからnscollectionViewitemに値を渡します
-
28-10-2019 - |
質問
NSCollectionViewのプロトタイプとして使用されるカスタムNSView内にnstabviewがあります。 2番目のタブには、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];
}
}
}
インターフェイスビルダーのiboutletとして接続しているにもかかわらず、コンソールでこの「myimageview」トレース「null」を実行すると。理由を説明してもらえますか?代わりにこれをどうすればいいですか?また、nscollectionViewItemオブジェクトの「fileurl」値を「object object」に渡す必要がありますが、ここからアクセスする方法がわかりませんか?
解決
私はついにトラブルシューティングの1日後に必要なものを達成しました。私の元のアプローチにはいくつかの問題がありました:
1)nscollectionView内でnStabviewを使用することは、「非アクティブ」タブでバインディングが初期化されないため、悪い考えのようです。私はそれを廃棄し、代わりにオブジェクトの手動ショー/非表示でnssegmentedcontrolを選択しました。
2)私の元の質問のすべてのコードは、nsviewのサブクラスではなく、nscollectionViewitemのサブクラスの中に実際に入る必要があります。
今ではそれはすべて良いです。勉強中です。
所属していません StackOverflow