J'ai un NSCollectionView et la vue est une NSBox avec un label et un NSButton. Je veux un double clic ou un clic sur le NSButton pour dire au contrôleur d'effectuer une action avec l'objet représenté de NSCollectionViewItem. Le point de vue de l'article est a été sous-classé, le code est le suivant:Déplacement IBActions portée limitée
#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
Le problème que j'ai rencontré est que comme IBAction, les seules choses dans le cadre de -start sont les choses qui ont été liés dans IB, alors délégué et viewItem. Cela signifie que je ne peux pas obtenir à l'objet représenté pour l'envoyer au délégué.
Y a-t-il un moyen de contourner cette portée limitée ou une meilleure façon de se procurer l'objet représenté?
Merci.
Salut, j'ai du mal à comprendre votre question .. peut-être que nous pourrions le réécrire un peu et vous pouvez obtenir quelques réponses ... Quelques questions .. pourquoi sous-classe NSBox? C'est la mauvaise façon de faire les choses dans le cacao ou MVC en général. Ce code doit être dans un windowController ou un viewController. Qu'est-ce que -start:? Vous ne mentionnez pas. Aussi, je peux me tromper, mais je ne pense pas que bind: toObject: withKeyPath: fait ce que vous pensez qu'il fait. – hooleyhoop
Pendant que je suis là .. Un IBAction n'est pas vraiment 'une chose'. IBAction est juste une étiquette pour Interface Builder. Une méthode appelée IBAction est juste une méthode régulière. Il n'a en aucun cas «une portée limitée». Je trouve que parler de «portée» dans l'objectif-c indique probablement une certaine confusion provenant d'une langue différente. Il est rarement utile de parler de l'objectif-c. – hooleyhoop
"confusion venant d'une langue différente" - sans aucun doute;). Je pense que la portée était une façon assez décente de le décrire, mais bon. Je suis conscient IBAction est juste pour IB, mais la clé semble être la vue "prototype" pour un NSCollectionViewItem. Les deux méthodes de la vue semblent avoir une portée différente. Dans mouseDown wizardItem a une valeur, au début, c'est null. – Septih