architecture d'une appli de drag & drop d'image

tethystethys Membre
janvier 2012 modifié dans API AppKit #1
Bonjour,
Je débute sous cocoa et essaie de faire une petite appli de test basée sur le drag & drop,

mon architecture est la suivante :
une vue source (correspondant à  une classe et qui gère le drag), une vue cible (une autre classe qui gère le drop), et une classe AppController qui possède une variable d'instance vueSource pour pouvoir y redessiner
<br />(IBoutlet) VueSource *vueSource<br />

ma vueCible devrait être assez indépendante car elle ne redessine que ce qu'elle reçoit sur elle-même,
j'ai crée un objet AppController sous IB, et ait affectée sa variable d'instance à  la vue source physique sur ma fenêtre,

une fois le drop effectué dans ma VueCible, je souhaite en informer le controleur afin qu'elle redessine sur la vueSource,

une piste que j'ai commencée à  mettre en oeuvre, est de rajouter une variable d'instance de type AppController dans ma vueCible:
<br />AppController *theController<br />

je peux récuperer des choses dans mon controlleur, mais je pense que ce n'est pas le même objet que celui qui possède ma vueSource.
comment récuperer mon objet controlleur initial crée dans IB ?
je ne veux utiliser qu'un seul controleur..
(ainsi qu'une seule vueSource et qu'une seule vueCible)

je ne sais pas si je suis très clair mais je peux préciser si vous souhaitez,

Réponses

  • mpergandmpergand Membre
    janvier 2012 modifié #2
    dans 1325970998:

    une fois le drop effectué dans ma VueCible, je souhaite en informer le controleur afin qu'elle redessine sur la vueSource,


    Salut,

    Si tu utilises:
    - (void)dragImage:(NSImage *)anImage at:(NSPoint)imageLoc offset:(NSSize)mouseOffset event:(NSEvent *)theEvent pasteboard:(NSPasteboard *)pboard source:(id)sourceObject slideBack:(BOOL)slideBack

    tu peux spécifier la vueSource.

    Que tu peux récupérer dans la destination grace à  NSDraggingInfo:
    <br />- (void)concludeDragOperation:(id &lt;NSDraggingInfo&gt;)sender<br />{<br />&nbsp; NSView* vueSource=[sender draggingSource];<br />&nbsp; [vueSource setNeedsDisplay:YES];&nbsp; <br />}<br />
    

    une piste que j'ai commencée à  mettre en oeuvre, est de rajouter une variable d'instance de type AppController dans ma vueCible:


    Si tu as vraiment besoin de ça, cela s'appelle un delegate, il te faudra aussi définir un protocole.

    un exemple ici

    Plus simplement, tu peux aussi utiliser les notifications, voir ICI
  • tethystethys Membre
    janvier 2012 modifié #3
    merci de ta réponse,
    interessant pour récupérer la vue source !
    mais je comptais en effet partir sur les delegate
    ton lien est bien plus clair que ce que l'on trouve habituellement sur le sujet, et ça m'a bien aidé,

    et après une bonne connexion dans IB, j'utilise bien le même objet,
    merci !
  • AliGatorAliGator Membre, Modérateur
    08:33 modifié #4
    Sinon pour comprendre comment communiquer entre deux vues en utilisant le pattern delegate, tu as mon tuto aussi. Bon ok il prend comme base d'exemple une appli iPhone et des ViewControllers. Mais le principe (utiliser des @protocol, déclarer un delegate, etc) est le même pour une appli OSX : déclaration d'un @protocol, utilisation d'une variable d'instance qui sert de delegate, passage de l'objet qui sert de delegate par la vue 1, appel des méthodes sur le delegate par la vue2 pour l'informer d'actions ou informations, etc.
Connectez-vous ou Inscrivez-vous pour répondre.