11
votes

Afficher NSPOPOVER du bouton NSTOOLBARITEM

Je veux montrer un nspoppover à partir d'un bouton nstoolbaritem dans ma barre d'outils.
(c'est-à-dire positionné sous le bouton).

Idéalement, je veux transmettre le Nsview du bouton sur la Popover pour la positionner.
Ma question est, comment puis-je obtenir le Nsview du NSToolBaritem ?

[VUE DE TOOLBARBUTTON] retourne toujours nul.


0 commentaires

4 Réponses :


9
votes

La réponse semble être dans la vidéo de la Session WWDC 2011 113, "Changements d'écran complet et Aqua". Fondamentalement, mettez un nsbutton à l'intérieur du NSTOOLBARITEM et utilisez la vue de cela.

Un poteau de blog est ici: http://www.yellowfield.co.uk / blog /? p = 33 et un exemple de projet est sur GitHub chez http://github.com / Tevendale / Toolbarpover

Tout dans le sprit de http://xkcd.com/979 !


0 commentaires

2
votes

Vous pouvez envoyer l'action directement à partir du nsbutton ci-joint dans le NSToolBaritem (ce que vous devez généralement faire de toute façon, en tenant compte des contrôles segmentés, où chaque segment a sa propre cible / action), et cela fera le tour.


1 commentaires

Merci - je vais essayer ça un essai.



2
votes

Au lieu d'obtenir la vue à partir de l'expéditeur Ibaction, connectez directement une iboutlet directement à l'élément de la barre d'outils et utilisez-le pour obtenir la vue relative:

Dans votre fichier d'en-tête: P>

[self.thePopover showRelativeToRect:[[self.theToolbarItem view] bounds] ofView:[self.theToolbarItem view] preferredEdge:NSMinYEdge];


0 commentaires

0
votes

Bien que j'ai réussi à ce que le Popover ait été montré à l'aide de l'approche mentionnée par Stuart Tevendale, j'ai rencontré des problèmes lorsque j'ai essayé de valider (activer / désactiver) le nstolbaritems code> à l'aide du NstoolBardélégate CODE>:

-(BOOL)validateToolbarItem:(NSToolbarItem *)toolbarItem {
    BOOL enable = YES;

    NSString *identifier = [toolbarItem itemIdentifier];

    // This does never get called because I am using a button inside a custom `NSToolbarItem`
    if ([identifier isEqualToString:@"Popover"]) {
        return [self someValidationMechanism];
    } 

    // For this the validation works when I am using a standard `NSToolbarItem`
    else if ([identifier isEqualToString:@"StandardToolbarItem"]){
        return [self someOtherValidationMechanism];
    }

    return enable;
}


0 commentaires