Question

Quelle est la meilleure façon de créer un NSButton avec une image d'arrière-plan personnalisé, qui est en mesure d'avoir une largeur variable, sans le regard de lunette de coin tendu? Je sais qu'il ya des méthodes pratiques pour ce faire avec UIButton: http: / /jainmarket.blogspot.com/2009/04/create-uibuttonbutton-with-images.html mais je ne l'ai pas vu quelque chose de semblable dans NSButton.

Était-ce utile?

La solution

je devais avoir un arrière-plan de bouton personnalisé, voici comment je l'ai fait. J'ai fait une sous-classe NSButton et la méthode de drawRect l'emportait sur:

- (void)drawRect:(NSRect)dirtyRect
{
    // My buttons don't have a variable height, so I make sure that the height is fixed
    if (self.frame.size.height != 22) {
        self.frame = CGRectMake(self.frame.origin.x, self.frame.origin.y, self.frame.size.width,
                                22.0f);
    }
    // 
    switch (self.state) {
            // Onstate graphics
        case NSOnState:
            NSDrawThreePartImage(self.bounds, 
                                 [NSImage imageNamed:@"btnmain_lb_h.png"], [NSImage imageNamed:@"btnmain_bg_h.png"], [NSImage imageNamed:@"btnmain_rb_h.png"],
                                 NO, NSCompositeSourceAtop, 1.0, NO);
            // Offstate graphics
        default:
        case NSOffState:
            NSDrawThreePartImage(self.bounds, 
                                 [NSImage imageNamed:@"btnmain_lb.png"], [NSImage imageNamed:@"btnmain_bg.png"], [NSImage imageNamed:@"btnmain_rb.png"],
                                 NO, NSCompositeSourceAtop, 1.0, NO);
            break;
    }

    [super drawRect:dirtyRect];
}

Alors je pouvais mettre les boutons en utilisant Interface Builder, et pour obtenir les graphiques personnalisés que je viens de changer la classe à ma nouvelle sous-classe.

Autres conseils

cela a fonctionné parfaitement bien pour moi:

[self.addBuddyCommitButton.cell setBezelStyle:NSRoundedBezelStyle];

NSButton n'a pas les mêmes méthodes pratiques pour les images de fond comme UIButton (ce qui est étrange et voici à l'espoir d'Apple ponts cette lacune). Vous devrez créer un bouton personnalisé mon sous-classement NSView et la manipulation de la largeur variable et les coins vous-même. Je ne pense pas que ce sera facile, mais je ne pense pas qu'il serait très difficile non plus.

Cette vidéo explique une méthode qui semble être simple et ne nécessite qu'une seule image du bouton: http://youtu.be / 7MZJxPOo_xU

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top