Lier avec les bindings, différente vue de l'interface ?

aranaudaranaud Membre
01:44 modifié dans API AppKit #1
Je voudrai savoir si il est possible de choisir la vue à  afficher dans un NSView, de façon automatique (sans code), avec les bindings.

Pour que simplement, le nom de l'objet soit enregistrer dans un fichier.

Réponses

  • laurrislaurris Membre
    décembre 2006 modifié #2
    Si je comprends bien ce qu tu veux faire, tu voudrais binder le contenu d'une vue à  un contrôle obtenu à  partir du nom de sa classe.
    Pour la première partie, c'est possible même si ce n'est pas explicitement prévu puisque NSView n'expose aucun binding à  l'origine. On peut quand même binder le contenu d'une NSView à  une autre NSView. Dans mon cas j'ai bindé le "contentView" d'une NSBox à  une NSView et ça fonctionne. La seule interrogation , c'est la gestion de la mémoire parce qu'avec les bindings on est dans le flou à  ce niveau, qui pis est avec des NSView.

    Pour la seconde partie (obtenir la vue à  partir d'un string), je pense qu'un NSValueTransformer utilisant la fonction NSClassFromString (NSString *aClassName) devrait faire l'affaire.
  • aranaudaranaud Membre
    décembre 2006 modifié #3
    Je vois, c'est pas gagner.
    Je vais voir ce qui se passe si je binde le "contentView".

    Merci.

    Edit :
    selon ta méthode, l'organisation des objects seraient de se type la :

    IBOutlet classe1 *vue1;
    IBOutlet classe2 *vue2;
    ...
    IBOutlet classeN *vuenN;


    or moi je voudrai avoir ceci :

    IBOutlet NSView *vue1;
    IBOutlet NSView *vue2;
    ...
    IBOutlet NSView *vueN;

    Les vues étant enregistrées dans les resources avec Interface Builder.
  • aranaudaranaud Membre
    01:44 modifié #4
    Je suis en passe de résoudre mon problème.

    Mais, j'ai pas bien compris l'utilisation NSValueTransformer. Si tu pouvais m'éclairer grâce à  un exemple. Je t'en serais reconnaissant.
  • laurrislaurris Membre
    01:44 modifié #5
    NSValueTransformer permet de transformer (comme son nom l'indique) la valeur donnée par le binding en une autre valeur. On enregistre une instance de cette classe au démarrage (en général dans le handler +initialize) avec un nom. Ensuite, on peut affecter ce transformer dans IB ou dans le dictionaire "options" si on binde à  la main.

    Tu peux en voir des exemples sur cette page sur les bindings avec l'exemple "To Dos".
    http://homepage.mac.com/mmalc/CocoaExamples/controllers.html
    Par contre, à  te relire, je crois que je n'ai pas bien compris ce que tu binde: le nom de l'outlet ou le nom de la classe ?
    Si c'est le nom de l'outlet, pas besoin de transformer. Tu renvoie l'instance représentée par l'outlet avec un accesseur et tu binde le "keyPath" du Controller au nom de cet accesseur.


  • aranaudaranaud Membre
    01:44 modifié #6
    C'est le nom de l'outlet.
    Mais ce que semble pouvoir faire NSValueTransformer pourrait m'intéresser.
Connectez-vous ou Inscrivez-vous pour répondre.