Comment ajouter plusieurs éléments de menu avec le même titre à NSPopUpButton (NSMenu)?

StackOverflow https://stackoverflow.com/questions/2320059

Question

Comme docs disent qu'il est impossible d'ajouter deux éléments de menu NSPopUpButton s'ils ont tous deux le même titre. Je tentais d'ajouter des éléments de menu à [Menu] PopUpButton, mais pas de chance. Je suis également en train de créer un nouveau menu, ajouter des éléments, puis utilisez [PopUpButton setMenu: NewMenu], mais non. Afficher le menu toujours un seul élément par nom.

Mais je sais qu'il devrait être possible, si vous essayez de créer une liste de lecture intelligente dans iTunes, vous pouvez sélectionner « Playlist » à partir du bouton contextuel gauche, « = » du milieu, et celui de droite tenir des éléments de menu pour chaque liste de lecture dans iTunes, même si elles ont le même titre. Alors, comment ils le font?

Était-ce utile?

La solution

J'ai eu le problème exact et il a été résolu facilement. Au lieu d'utiliser NSPopUpButton méthodes telles que -addItemWithTitle: pour manipuler les éléments de bouton, j'ai ajouté un NSArrayController et a ajouté les éléments dans le contrôleur de tableau au lieu . Ensuite, je les liaisons pour lier le contrôleur et le bouton contextuel et maintenant il affiche les éléments ayant les mêmes titres.

Pour les liaisons:

  1. Ajoutez un NSArrayController IB.
  2. Régler la NSPopUpButton fixations pour "Contenu" Array Controller avec les " Contrôleur clés " étant "arrangedObjects"
  3. Régler la NSPopUpButton fixations pour "sélectionné Index" Array Controller avec "Key Controller" étant "selectionIndex"
  4. [en option] Sélectionnez le contrôleur RAID et définir le nom de classe dans les attributs à quelque classe vos articles sont par exemple NSString ou vous pouvez utiliser la valeur par défaut NSMutableDictionary et ajouter des clés dans la case ci-dessous qui vous permet par conséquent envelopper vos articles dans un dictionnaire et d'ajouter des clés différentes pour ce que vous voulez afficher dans bouton contextuel et ce que vous voulez avoir en arrière-plan. Pour définir quelle clé du dictionnaire que vous voulez être reflété dans le bouton contextuel, allez à consolidations de bouton popup pour « Contenu » et réglez la « touche Modal Path » la clé que vous avez ajouté dans l'attribut contrôleur RAID.

Autres conseils

Alors que les méthodes NSPopUpButton comme addItemWithTitle: et addMenu: ne permettra pas à des noms en double, il est certainement possible d'avoir des éléments avec le même titre. Il vous suffit de définir le nom sur le NSMenuItem lui-même.

Par exemple, si vous avez un tableau de chaînes (comme les noms de liste de lecture peut-être) que vous souhaitez les ajouter à un bouton contextuel, et que vous voulez faire des doublons sûrs seront là-dedans, faites comme ceci:

NSArray* items = [NSArray arrayWithObjects:@"Foo", @"Bar", @"Baz", @"Foo", nil];

for (NSString* item in items)
{
   [popupButton addItemWithTitle:@"blah"];
   [[popupButton lastItem] setTitle:item];
   [[popupButton lastItem] setTarget:self];
   [[popupButton lastItem] setAction:@selector(something:)];
}

Au lieu d'utiliser addItemWithTitle:, vous pouvez créer un NSMenuItem et manuellement ajouter directement au menu. Cela vous permet de spécifier un titre que vous voulez, ainsi que d'être en mesure d'insérer à tout emplacement dans le menu.

NSMenuItem* newItem = [[NSMenuItem alloc] initWithTitle:@"foo" action:@selector(something:) keyEquivalent:@""];

[newItem setTarget:self];
[[popupButton menu] addItem:newItem];
[newItem release];
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top