NSCollectionViewがあり、ビューはラベルとNSButtonを持つNSBoxです。NSButtonをダブルクリックまたはクリックして、NSCollectionViewItemの表現されたオブジェクトでアクションを実行するようにコントローラーに指示したいと思います。アイテムビューはサブクラス化されており、コードは次のとおりです。
#import <Cocoa/Cocoa.h>
#import "WizardItem.h"
@interface WizardItemView : NSBox {
id delegate;
IBOutlet NSCollectionViewItem * viewItem;
WizardItem * wizardItem;
}
@property(readwrite,retain) WizardItem * wizardItem;
@property(readwrite,retain) id delegate;
-(IBAction)start:(id)sender;
@end
#import "WizardItemView.h"
@implementation WizardItemView
@synthesize wizardItem, delegate;
-(void)awakeFromNib {
[self bind:@"wizardItem" toObject:viewItem withKeyPath:@"representedObject" options:nil];
}
-(void)mouseDown:(NSEvent *)event {
[super mouseDown:event];
if([event clickCount] > 1) {
[delegate performAction:[wizardItem action]];
}
}
-(IBAction)start:(id)sender {
[delegate performAction:[wizardItem action]];
}
@end
私が遭遇した問題は、IBActionとして、-startのスコープ内にあるのは、IBにバインドされているものだけなので、delegateとviewItemであるということです。これは、表現されたオブジェクトを取得してデリゲートに送信できないことを意味します。
この限られた範囲を回避する方法、または表現されたオブジェクトを取得するためのより良い方法はありますか?
ありがとう。