0

J'ai un NSArrayController qui gère les entités de GeometryShape. GeometryShape a: name, type, color. LineShape est un GeometryShape et possède: beginPositionX, beginPositionY, endPositionX, endPositionY. CircleShape est un GeometryShape et a: positionX, positionY, radius.Comment lier différentes entités avec NSTableView et NSTabView?

Le NSTableView montre toutes les formes insérées dans le NSArrayController, où chaque colonne est liée avec arrangedObjects & le nom de clé.

Lorsque je sélectionne une forme de ligne, ses propriétés sont affichées dans l'onglet Ligne - qui est l'onglet par défaut.

Maintenant, si je sélectionne une forme de cercle, je veux que l'onglet Cercle soit sélectionné et que les propriétés des cercles soient affichées.

... et ainsi, en fonction du type de forme que je sélectionne, l'onglet correspondant sera sélectionné et affichera les propriétés de forme correspondantes.

Comment puis-je réaliser cet excellent :) modèle?

enter image description here

Répondre

0

Je pense que vous voulez mettre en œuvre un NSTableViewDelegate et sélectionnez programme l'onglet approprié dans une mise en œuvre de tableViewSelectionDidChange: Lorsque les changements de sélection, vous prenez juste IBOutlet du TabView et attribuer un nouveau selectedIndex sur la base du arrayController de sélection. Alternativement, vous pouvez lier la valeur de selectedIndex de tabView à la sélection du contrôleur RAID, mais vous aurez besoin d'un transformateur de valeur personnalisé converti de la sélection id en un NSUInteger qui reflète la classe appropriée.

Dans l'une ou l'autre implémentation, vous écrivez du code en utilisant isKindOfClass et mappez vers un entier.

Vous pouvez également être en mesure de lier la selectedLabel de vue de l'onglet du contrôleur RAID keypath de selection.class mais je devine que vous aurait encore besoin d'un emballage valuetransformer NSStringFromClass() comme décrit dans le NSValueTransformer docs. Je ne suis pas totalement certain qu'il existe un moyen complètement non-code de transformer la classe en une chaîne à laquelle vous pouvez lier l'étiquette selected, cependant. Personnellement, je n'aime pas implémenter le transformateur de valeur personnalisée parce que vous écrivez du code pour permettre l'implémentation d'un comportement enfoui dans IB ... tout pour éviter d'écrire du code qui pourrait exister dans un délégué tableView personnalisé.

Questions connexes