2010-01-31 5 views
1

Mon application utilise la méthode -validateMenuItem: pour valider les éléments de menu. Mais j'ai besoin de valider différents éléments de menu en fonction de quelle popup est là poObtention de NSPopUpButton à partir de NSMenuItem

J'espérais un moyen d'obtenir l'étiquette de la popup, mais après avoir regardé les documents, je n'arrive pas à trouver un moyen. .. des idées?

Edit: Je pensais que ce besoin d'un peu plus de contexte ... mon modèle d'objet est un JDBCSyncer (synchronisations une base de données avec une autre), ma fenêtre est un des paramètres, et je besoin de valider mes éléments de menu à base de que leur titre soit dans un tableau de chaînes représentant les différents champs d'une table. L'idée est que vous sélectionnez le champ d'un popup.

Répondre

3

Je n'ai pas une grande réponse du haut de ma tête, mais que diriez-vous quelque chose le long de ces lignes:

- (BOOL)validateMenuItem:(NSMenuItem *)menuItem 
{ 
    NSMenu *menu = [menuItem menu]; 
    if (menu == [popUpButton1 menu]) { 
     return YES; 
    } 
    else if (menu == [popUpButton2 menu]) { 
     return NO; 
    } 
    else (menu == [popUpButton3 menu]) { 
     return YES; 
    } 
    else { 
     return NO; 
    } 
} 
+0

Cela ne fonctionnera pas avec les sous-menus. –

0

Si les éléments de menu dans ces boutons contextuels sont tellement sans rapport que vous avez besoin pour distinguer un bouton pop-up de l'autre, vous devriez peut-être créer des objets de contrôleur séparés pour eux. Chaque contrôleur serait la cible (et, par conséquent, le validateur) des éléments de menu de ses boutons pop-up, et seulement ce/ces boutons pop-up.

Certains ou tous ces contrôleurs peuvent également alimenter des vues de table ou des vues de collection, si cela est logique pour les éléments en question. Cela vous permet également d'étiqueter les éléments de menu pour une identification facile, sans vous soucier des collisions de balises (même balise utilisée dans deux ou plusieurs éléments d'interface utilisateur sans rapport), car chaque contrôleur ne voit que les balises qu'il connaît. De même, si un contrôleur utilise des objets représentés (le plus probable s'il remplit dynamiquement son (ses) bouton (s) contextuel (s)), il n'a pas à se soucier de voir les objets représentés qu'il ne reconnaît pas.

+0

Cela semble être une bonne idée - j'ai créé un nouvel ensemble de contrôleurs et ils reçoivent validateMenuItem: comme prévu. Mais maintenant j'ai un autre problème, je validais le NSMenuItem en vérifiant que son titre était dans un NSArray. Ce tableau a été retourné à partir de mon objet modèle - qui appartient à mon contrôleur 'principal'. Alors maintenant, mes nouveaux contrôleurs n'ont pas accès à ce tableau. Je suis sûr que cela est quelque chose de très simple, mais je suis assez nouveau pour le cacao et en essayant toujours de saisir le modèle de conception, Cheers, Marcus –

+0

Et aussi, mon popups contenu avaient des liaisons à cette NSArray –

+0

donc votre objet modèle possède une gamme de titres? Cela ressemble à une partie d'un tableau parallèle, ce qui est faux. Vous devriez avoir un tableau d'objets de modèle, dont chacun a un titre. Rappelez-vous, un objet modèle modèle * quelque chose *; dans ce cas, c'est quelque chose qui a un titre. –

Questions connexes