[résolu] NSViewController Draggable (bis)

mybofymybofy Membre
octobre 2013 modifié dans API AppKit #1

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.


 


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.


     


Connectez-vous ou Inscrivez-vous pour répondre.