2010-01-14 3 views
0

J'utilise un NSMatrix comme un clavier et d'appeler:Obtenir l'état actuel de NSButtonCell dans un NSMatrix

[selectedCell setEnabled:NO]; 
[selectedCell setTransparent:YES]; 

lorsqu'une touche est sélectionnée (pour éviter d'être à nouveau effectué la même opération). Cependant, je voudrais aussi l'option de «basculer» les sélections entières une fois terminé - c'est-à-dire, en remplaçant toutes les cellules supprimés et en cachant les restants (non sélectionnés).

Est-il possible de boucle à travers toutes les cellules de ma matrice et vérifier leur permis/état transparent en utilisant quelque chose comme:

if([selectedCell isEnabled] == NO) 
    NSLog(@"the cell is disabled"); 
if([selectedCell isTransparent] == YES) 
    NSLog(@"the cell is transparent"); 

Le code ci-dessus ne fonctionne pas bien sûr, mais vous voyez l'idée. .. Je suis un débutant relatif, donc toute aide serait très appréciée. Merci :-)

Répondre

1

NSMatrix vous permet d'obtenir the number of columns et the number of rows, et the cell at a specific row and column. Donc, faites cela dans un couple de for boucles.

La balise Going by peut fonctionner, mais nécessite que vous donniez à chaque cellule sa propre balise, et (dans l'exemple que vous montrez) que toutes les balises sont dans une série. Tout nombre impair, les étiquettes en double ou les cellules non marquées peuvent causer des problèmes.

+0

Merci pour le conseil, Peter. C'est une façon beaucoup plus propre de le faire et évite également le besoin de «câbler» la taille de la matrice dans l'application. Appréciez vos commentaires! – Bender

0

MISE À JOUR !! Bon les gars, j'ai résolu cela avec:

for(key=1; key <= 16; key++) 
if([[numericKeypad cellWithTag:key] isTransparent] == YES) 
    // ...or alternatively... 
    // if([[numericKeypad cellWithTag:key] isEnabled:NO]) 
    { 
    [[numericKeypad cellWithTag:key] setTransparent:NO]; 
    [[numericKeypad cellWithTag:key] setEnabled:YES]; 
    } 
else 
    { 
    //...disable it... 
    } 

Il semble que je suis assez près tout le long, mais je me battais pour une journée entière à essayer de trouver la bonne syntaxe en raison de manque d'expérience. Merci beaucoup de toute façon :-)

1

J'utilise NSNumber pour stocker l'index sélectionné du groupe radio (traité comme NSMatrix dans le constructeur d'interface). Pour réaliser cela, je synthétise une variable membre pour laquelle je mets le "Selected Index" liaison du groupe radio.

@interface MyClass { 
    NSNumber* m_selectedIndex; 
} 
@property (readwrite, assign) NSNumber* selectedIndex; 

En outre, j'ai ajouté une énumération pour rendre les valeurs lisibles par l'homme.

typedef enum { APPLE = 0, PLUM = 1 } SELECTION_STATE; 
Questions connexes