7
votes

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

Comme Docs disent qu'il est impossible d'ajouter deux éléments de menu à NSPOPUPUPBUTON si elles ont tous les deux le même titre. J'essayais d'ajouter des éléments de menu au [menu popupboutton], mais sans chance. J'essayais également de créer un nouveau menu, d'ajouter des articles, puis d'utiliser [Popupbutton Setingmenu: Newmenu], mais non. Le menu affiche toujours un seul élément par nom.

Mais je sais que cela 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 de gauche "=" du milieu et la droite contient des éléments de menu pour chaque playliste d'iTunes même s'ils ont le même titre. Alors, comment le font-ils?


0 commentaires

4 Réponses :


5
votes

tandis que les méthodes NSPOPUPBUTON telles que AddiTemWithTtile: et AddMenu: ne permettront pas les noms en double, il est définitivement possible d'avoir des éléments avec le même titre. Vous devez simplement définir le nom sur le nsmenuitem lui-même.

Par exemple, si vous avez un tableau de chaînes (comme des noms de liste de lecture peut-être), vous souhaitez les ajouter à un bouton contextuel et que vous voulez vous assurer que les doublons seront dans Là, faites-le comme ceci: xxx


3 commentaires

Ken j'ai essayé cette approche aussi. Mais le résultat est le même. Peut-être que parce que mon bouton contextuel est dans NspredicatedIntionDeTemplate et il est traité par son éditeur de prédicat. J'aimerais voir un code source où cette méthode fonctionne.


Je le fais dans l'une de mes applications et cela fonctionne. C'est là que j'ai eu le code que j'ai simplifié ci-dessus. Je devais le faire de cette façon, car le menu répertorie les paramètres prédéfinis nommés par l'utilisateur et les doublons devaient être autorisés. Je n'ai jamais utilisé l'éditeur de prédicat, donc je ne peux pas m'empêcher de là. Pardon!


PS: Si vous voulez le voir travailler, effectuez simplement un nouveau projet de test avec un bouton contextuel et coller dans ce code.



3
votes

au lieu d'utiliser additemwithtitle: code>, vous pouvez créer un nsmenuitem manuellement et l'ajouter directement au menu. Cela vous permet de spécifier tout titre souhaité, ainsi que de pouvoir l'insérer à n'importe quel emplacement du menu.

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

[newItem setTarget:self];
[[popupButton menu] addItem:newItem];
[newItem release];


2 commentaires

Cela ne résout pas le problème. NSPOPUPBUTTON se comportera exactement comme si NSPOPUPUPBUTON'S Additemwithtitle: titre a été utilisé: un élément sera affiché pour chaque titre unique.


Cela a totalement travaillé pour moi juste maintenant (MacOS 10.15+). Vous ne pouvez pas mélanger Nsmenuitems et objetsWithtitle dans le même nspopupboutton! Hey Brian, Whassup!



1
votes

J'ai eu le problème exact et cela a été résolu facilement. Au lieu d'utiliser des méthodes nspopupbutton tels que -additemwithtitle: pour manipuler les éléments de bouton, j'ai ajouté un nsarraycontroller et ajouté les éléments dans le contrôleur de tableau à la place. . Ensuite, j'ai utilisé les liaisons pour lier le contrôleur et le bouton contextuel et il affiche maintenant des éléments avec les mêmes titres.

faire les reliures:

  1. Ajouter un NsarrayController in IB.
  2. Définissez les reliures nspopupboutton pour "Contenu" TO TRAY Controller avec la clé de contrôleur " " étant "arrangement"
  3. Définissez les reliures NSPOPUPBUTON pour "Index sélectionné" TO TRAY Controller avec la "clé de contrôleur" étant
  4. [Facultatif] Sélectionnez le contrôleur de tableau et définissez le nom de la classe en attributs sur n'importe quelle classe vos articles sont par exemple. nsstring ou vous pouvez utiliser les touches nsmutmictionnaires par défaut et ajouter des touches dans la case ci-dessous qui vous permet de compléter vos articles dans un dictionnaire et d'ajouter différentes clés pour ce que vous voulez montrer Bouton Popup et ce que vous voulez avoir en arrière-plan. Pour définir quelle clé du dictionnaire que vous souhaitez refléter dans le bouton contextuel, accédez aux liaisons du bouton contextuel pour "Contenu" et définissez le chemin Key modal "fort" à La clé que vous avez ajoutée dans l'attribut du contrôleur Array.

0 commentaires

0
votes

Swift 5 Ajoutez l'utilisation d'un titre unique garanti, puis modifiez le titre dans l'énoncé suivant.

  • "ComptePu" est un objet NSPOPUPBUTON
  • "de" est un objet de compte. xxx

0 commentaires