J'ai un nsmenu avec des Nsmenuitems ajoutés dynamiquement. Le Nsmenu n'est pas rafraîchissant correctement pendant qu'il est tenu ouvert. Je appelle la méthode de mise à jour NSMENU dans J'ai mis en œuvre des méthodes suivantes pour mettre à jour NSMENU. P> nsventtrackingrunloopmodes code>.
- (void)menuNeedsUpdate:(NSMenu *)menu {
for (NSInteger index = 0; index < count; index++)
[self menu:menu updateItem:[menu itemAtIndex:index]
atIndex:index
shouldCancel:NO];
}
- (BOOL)menu:(NSMenu *)menu updateItem:(NSMenuItem *)item atIndex:(NSInteger)index shouldCancel:(BOOL)shouldCancel`
- (NSInteger)numberOfItemsInMenu:(NSMenu *)menu
3 Réponses :
Vous avez laissé un tas de code. Cependant, vous n'êtes pas censé appeler En outre, vous ne supposez généralement pas mettre en œuvre em> Enfin, toutes ces méthodes sont documentées comme étant appelées "lorsqu'un menu est sur le point d'être affiché". Je ne suis pas terriblement surpris qu'ils ne soient pas appelés à plusieurs reprises lorsque le menu est ouvert. P>
Si vous connaissez le menu doit être mis à jour, vous pouvez essayer d'appeler -Menu: updateItem: AttinDex: Député: code>. C'est une méthode que vous êtes censé mettre en œuvre et que le cadre est censé l'appeler. P>
-MenuneedsUpdate: code> ou em> tous les deux
-NumberofitemSinmenu: code > et
-Menu: up upountItem: AttinDex: Député: code>. La mise en œuvre des trois n'a pas beaucoup de sens. Vous implémentez le premier si vous pouvez créer le menu immédiatement. Vous implémentez ces deux derniers si la construction du menu prendra du temps. P>
- [NSMENU Update] code>. Cela peut provoquer cela pour appeler vos méthodes de délégation. Je suis sûr que vous pouvez également appeler simplement les méthodes sur
nsmenu code> et
nsmenuitem code> pour modifier le menu, sans attendre que votre délégué soit appelé. P>
[NSMENU Update] code> n'appelle aucune méthode de délégué. Je peuploie de manière dynamique les éléments de menu dans une minuterie et NsMenu ne met pas à jour lorsqu'il est ouvert.
Il ne met pas à jour même si vous invoquez des choses comme - [nsmenu additem:] code> ou
- [Nsmenuitem Settitle:] code> en réponse à votre minuterie? Je suis sûr que j'ai vu des menus à jour pendant qu'ils sont ouverts, il est donc possible.
@Kenthomases La première partie de l'horloge fait cela (il est plus visible si vous affichez des secondes).
Je suis de manière dynamique des éléments de menu dans une minuterie et NSMENU ne met pas à jour lorsqu'il est ouvert. P>
Assurez-vous d'avoir le feu de la minuterie sur le mode de course correspondant: p>
xxx pré> Vous ne pouvez avoir peut-être que le feu sur
nsdefaultrunloopmode code> en ce moment. < / p> blockQuote>
J'ai essayé d'utiliser nsrunloopcommonModes mais je reçois toujours le menu de la question rafraîchissante alors qu'il est ouvert
Mise à jour des éléments de menu dans NSVENTTrackingRunloopMode code> a résolu ce problème. P>
J'ai une question similaire. Je voudrais mettre à jour le NSMENU lorsqu'il est ouvert selon que l'utilisateur appuie sur la touche Option. Le comportement dont j'ai besoin pour quel Xcode fait lorsque le menu du produit est ouvert et que la touche d'option est enfoncée. Cela peut-il être fait avec les méthodes intégrées NSMENU?