NSMatrix avec des custom NSCell

olivier555olivier555 Membre
07:59 modifié dans API AppKit #1
Bonjour,
Je voudrais créer une NSMatrix (je suppose que c'est la meilleure méthodes pour ce que j'essaie de faire) qui affiche dynamiquement un nombre de custom views les unes en dessous des autres (en fonction des données du logiciel, les cellules sont donc créées ou supprimées par le code). Les custom views sont identiques et peuvent aller de une à  256, et possèdent bouton, slider, etc... . Comment faire de manière simple et élégante s'il vous-plaà®t? Merci!

Réponses

  • BruBru Membre
    07:59 modifié #2
    Ce que tu veux faire est extrèmement complexe si tu veux utiliser NSMatrix.

    NSMatrix n'affiche des NSCell. Or ton "custom-view" est un objet graphique riche (puisque contenant d'autres NSControls).
    Bref, tu vas galérer à  construire un custom-cell qui sera équivalente à  ton custom-view.

    A ta place, je crois que je gèrerais la chose en créant un NSView chargé d'accueillir les x custom-views.
    Pour ajouter un custom-view, un addSubview: avec les bonnes coordonnées de frame. Et pour retirer, removeFromSuperview.

    Le plus dur sera la gestion des coordonnées, mais ça reste dans le domaine du faisable.

    .
  • olivier555olivier555 Membre
    07:59 modifié #3
    OK d'accord, merci de ta réponse. Mais comment faire pour afficher x custom views et les gérer indépendamment? Par exemple, si mon code est :

    <br />[self addSubview:customView positioned:NSWindowBelow relativeTo:nil];<br />[self addSubview:customView positioned:NSWindowBelow relativeTo:nil];<br />
    


    le programme ne m'affiche qu'une customView. Et comment je fais pour les gérer indépendamment? Tu vois ce que je veux dire?
  • olivier555olivier555 Membre
    07:59 modifié #4
    En gors je voudrais éditer graphiquement une vue sur PB, puis faire en sorte que cette vue soit un "type" et pas une instance, ainsi je pourrais en créer autant que je veux.
  • BruBru Membre
    07:59 modifié #5
    dans 1146144404:

    En gors je voudrais éditer graphiquement une vue sur PB, puis faire en sorte que cette vue soit un "type" et pas une instance, ainsi je pourrais en créer autant que je veux.


    C'est le principe auquel je pensais.

    Dans IB tu fabriques ton custom-view qui servira de modèle...

    Pour la gestion de l'ajout et du chargement, je te donnerais un petit exemple ce soir (là , au taf, je n'ai qu'un moche PC et un moche Windows)...

    .
  • olivier555olivier555 Membre
    07:59 modifié #6
    Merci beaucoup!
  • BruBru Membre
    07:59 modifié #7
    Voilà  un petit projet pour te faire les dents.

    C'est minimaliste, mais ça illustre bien le concept d'une matrice de custom-view à  partir d'un NSView modèle.

    A toi de comprendre le principe, d'étoffer le code.

    .

    [Fichier joint supprimé par l'administrateur]
  • olivier555olivier555 Membre
    07:59 modifié #8
    Merci 1000 fois à  toi! Tu me débloques la situation, ça marche impeccable et j'ai appris quelque chose (comment convertir en type une vue faite sous IB). Et merci pour avoir passer du temps à  pondre ce projet!
  • olivier555olivier555 Membre
    07:59 modifié #9
    J'ai encore un petit souci... Mes pointeurs vers mes éléments de ma custom view sont nuls lors de l'initialisation :
    <br />// création d&#39;un contrôleur de custom-view<br />o555ViewController=[[O555ViewController alloc] init];<br />
    


    Alors que le pointeur vers la vue elle même n'est pas nul. Sur ton projet cela marche nikel mais je ne vois pas la différence. Aurais-tu une idée?
  • olivier555olivier555 Membre
    07:59 modifié #10
    Non c'est lors du chargement du nib pardon:
    <br />[NSBundle loadNibNamed:@&quot;custom-view&quot; owner:o555ViewController]<br />
    
  • BruBru Membre
    07:59 modifié #11
    dans 1146234620:

    J'ai encore un petit souci... Mes pointeurs vers mes éléments de ma custom view sont nuls lors de l'initialisation :
    <br />// création d&#39;un contrôleur de custom-view<br />o555ViewController=[[O555ViewController alloc] init];<br />
    

    Alors que le pointeur vers la vue elle même n'est pas nul. Sur ton projet cela marche nikel mais je ne vois pas la différence. Aurais-tu une idée?


    Chaque custom-view instancié (par loadNibNamed:owner:) est "connecté" à  son owner. Le owner est une instance de O555ViewController qui contient les IBOutlet et IBAction que tu vas utiliser dans le nib.

    Dans le nib, le owner est représenté par l'icône "File's Owner" dans la fenêtre principale.
    Dans mon projet, j'ai mis en custom-class de File's Owner la classe O555ViewController.
    C'est entre File's Owner et le custom-view qu'il faudra lier les outlets et actions.

    Donc, si tu modifies le header de la classe O555ViewController dans Xcode, il faut répercuter les modifs dans IB, et refaire les liaisons d'outlets et actions.

    Pour mettre à  jour le header dans IB, va dans l'onglet Classes de la fenêtre principale de IB, puis, cherche la classe O555ViewController dans le browser de classe (sous-classe de NSObject), enfin, fais un clic droit sur la classe et choisis l'option de menu "Read O555ViewController.h file".

    Après, il ne te reste plus qu'a connecter les nouveaux IBOutlet/IBAction aux éléments du custom-view.

    .
  • olivier555olivier555 Membre
    07:59 modifié #12
    Bah oui c'est comme ça que je fais, j'ai tout vérifié 1000 fois et redémaré XCode pour être sûr. Je pète un câble. Bon, ça doit être une erreur débile encore... Merci encore de ton aide!
Connectez-vous ou Inscrivez-vous pour répondre.