[résolu] NSViewController Draggable (bis)
mybofy
Membre
Le sujet "NSViewController Draggable" est présenté comme "Résolu".
Il l'est pour l'initiateur du sujet, mais aucune piste de solution n'est offerte aux autres qui on lu ce sujet avec attention, autre que : sous-classer la vue.
MyView.h
#import <Cocoa/Cocoa.h>
@interface MyView : NSView <NSDraggingDestination>
@end
MyView.m
#import "MyView.h"
@implementation MyView
- (void) mouseDown:(NSEvent *)theEvent {
NSLog(@MyView>mouseDown);
}
- (void)draggingEnded:(id <NSDraggingInfo>)sender {
NSLog(@MyView>draggingEnded);
}
- (id)initWithFrame:(NSRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code here.
}
return self;
}
/*- (void)drawRect:(NSRect)dirtyRect
{
// Drawing code here.
}*/
@end
MyViewController.h
#import <Cocoa/Cocoa.h>
#import "MyView.h"
@interface MyViewController : NSViewController
@property (weak) IBOutlet MyView *maVue;
@end
MyViewController.m
#import "MyViewController.h"
@interface MyViewController ()
@end
@implementation MyViewController
@synthesize maVue=_maVue;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Initialization code here.
}
return self;
}
@end
Problème : MyView n'apparaà®t pas dans Identity Inspector > Custom Class
NSView est pris à la place et donc aucune réaction à la souris.
J'applique mal la doc qui recommande de sous-classer NSView, pour récupérer les évènements de la souris. Mais où ?
J'ai fait cette manip pour NSImageView et ça marche parfaitement.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Il faut enregistrer les types de pasteboards gérés par la vue:
- (void)registerForDraggedTypes:(NSArray *)newTypes
MyView apparaà®t bel et bien dans dans Identity Inspector > Custom Class !
J'ai mal lu, et cela à de nombreuses reprises... Je vais de ce pas chez l'opticien.
Donc, la procédure (qui marche chez moi : OSX 10.7.5 Xcode 4.6.3) est la suivante.
Créer la sous-classe MyView de NSView.
Créer la sous-classe MyViewController de NSViewController avec Nib.
Dans le Nib de MyViewController ajouter une Custom View (une NSView en fait).
Dans le Nib, sélectionner la Custom View et lui attribuer la sous-classe MyView dans Identity Inspector > Custom Class (c'est là le point clé).
Après, on fait ce qu'on veut avec les événements de la souris et autres.
Pour le dragging spécifiquement, cf. l'exemple CocoaDragAndDrop
https://developer.apple.com/library/mac/samplecode/CocoaDragAndDrop/Introduction/Intro.html
Merci à tous.