custom cell dans interface builder

Philippe49Philippe49 Membre
Comment faire une NSMatrix dans IB à  partir de son propre choix de NSCell
On trouve à  faire des matrices à  partir de NSTextFieldCell, NSButtonCell, et NSFormCell mais je ne trouve pas la manip pour en faire une à  partir de la classe perso héritant de NSBrowserCell.

(Je tiens via à  stocker dans IB des données arborescentes, permettant une internationalisation de l'appli)

Merci de votre aide

  javascript:replaceText('%20:fouf):',%20document.forms.postmodify.message);

Réponses

  • Eddy58Eddy58 Membre
    18:44 modifié #2
    Apparemment IB ne permet pas de faire une NSMatrix avec des NSBrowserCell, mais par programmation tu peux toujours sous-classer NSMatrix et surcharger la méthode initWithFrame:mode:cellClass:numberOfRows:numberOfColumns:

    Et puis, comme tu es nouveau, bienvenue à  toi, et, d'autre part, tout nouveau se doit d'offrir sa tournée générale. :) ...Pour moi ça sera champagne en ce jour de nouvel an. 8) :p :p
  • Philippe49Philippe49 Membre
    18:44 modifié #3
    Champagne, champagne, comme vous y allez ! enfin bon,  pop (popup) pour tout le monde, et bonne année 2007.

    Oui, les solutions en utilisant le code sont nombreuses, mais j'aurais trouvé plus élégant de stocker dans IB les données (assez lourdes) dont j'ai besoin pour créer mon NSBrowser : ce Browser contient en fait une arborescence d'options que l'utilisateur peut choisir à  son gré.

    J'ai vu que que l'on pouvait sousclasser NSMatrix dans IB, et instantier une sous-classe. Mais là  encore je n'arrive pas à  y mettre mes données sous la forme utile  (sous-classe de NSBrowserCell, contenant des outlets et une action sous forme d'un sélecteur)

    Pour l'instant, j'ai trouvé le stockage dans des matrices de NSTextField ou des NSPopupbutton, avec recopie dans le code. Mais c'est moche ... Autre solution avec un fichier.
  • BruBru Membre
    18:44 modifié #4
    Il n'y a pas d'autre solution que de créer le NSControl qui accepte ton custom cell, puis ensuite de créer une palette IB afin que ce nouveau contrôle soit manipulable dans IB.

    .
  • Philippe49Philippe49 Membre
    18:44 modifié #5

    Oui, palettiser est le plus rigolo. C'est l'occasion de l'apprendre entre autre.

    J'ai un problème maintenant avec les custom palette. Je suis un pdf récupéré sur cocoadev (parce que sur la doc apple je vois NIB !) qui palettise la DotView présent dans les exemples de AppKit.
    (http://www.cocoadev.com/index.pl?IBPalette)

    Tout marche bien .. la compilation correcte, apparition de la palette dans la librairie, possibilité de visualiser la palette supplémentaire dans IB, mais au moment du dépot de l'instance de la DotView dans une fenêtre d'un nouveau nib, il y a un refus de réaliser le déposé (un peu comme lorsqu'une vue refuse un drag&drop )  .

    J'ai réessayé plusieurs fois, lamentable échec, crise de nerfs, et tout et tout
    J'ai comparé avec ce qu'en dit Aaron Hillegass, rien vu.

    Autre question, un projet IBPalette crée une framework associée. Elle est dans la palette ou faut-il faire un #import dans le code ?

    Meilleurs voeux pour le 3 Janvier !
     
  • laurrislaurris Membre
    18:44 modifié #6
    phrobine, qu'est-ce que tu as comme message d'erreur lors du refus de drop ? "object already in object table" par hasard ? J'ai perdu deux jours à  débugger ce truc sans vraiment réussir. Si c'est ça, je peux essayer de te donner qd même des infos.
    Le framework, il faut l'importer et le linker. Tu peux l'inclure dans la palette (jamais essayé ceci dit) mais je ne vois pas bien l'intérêt. C'est pour une histoire d'installation plus facile ? Il faut savoir que de toutes façon le framework devra également être distribué avec l'appli qui contient ton custom object. Donc autant le laisser à  part et l'installer dans ~/Library/Frameworks/.

    Meilleurs voeux du 10 Janvier aussi !
  • Philippe49Philippe49 Membre
    18:44 modifié #7

    J'ai répondu en partie à  mon problème, sans en comprendre totalement la subtilité.
    Il semble qu'il s'agisse d'une implémentation obsolète des méthodes initWithCoder et encodeWithCoder

    Voir le sujet http://www.objective-cocoa.org/forum/index.php?topic=2060.0

    D'accord en ce qui concerne l'importation du framework, qui s'installe automatiquement (désormais?) dans ~/Library/Frameworks lors de la compilation de la palette.

    Si tu as le temps, jette un coup d'oeil au document IBPalette, et dis-moi si tu trouves des améliorations à  faire. On pourrait alors le proposer en article sur ce site.



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