Quelle est la meilleure façon de créer un NSButton avec une image d'arrière-plan personnalisée, capable d'avoir une largeur variable, sans que le cadre du coin ne soit étiré? Je sais qu'il existe des méthodes pratiques pour faire cela avec UIButton: http://jainmarket.blogspot.com/2009/04/create-uibuttonbutton-with-images.html mais je n'ai rien vu de similaire dans NSButton.NSButton avec largeur variable, coins arrondis
Répondre
Je devais avoir un fond de bouton personnalisé, voici comment je l'ai fait. J'ai fait une méthode sous-classe NSButton et l'emportaient sur drawRect:
- (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 pourrais 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.
NSButton
n'a pas les mêmes méthodes de commodité pour les images d'arrière-plan que UIButton
(ce qui est étrange et espérer qu'Apple comble cet écart). Vous aurez besoin de créer un bouton personnalisé mon sous-classement NSView
et en manipulant la largeur variable et les coins vous-même. Je ne pense pas que ce sera facile, mais je ne pense pas que ce serait terriblement difficile non plus.
cela a fonctionné parfaitement bien pour moi:
[self.addBuddyCommitButton.cell setBezelStyle:NSRoundedBezelStyle];
après avoir écrasé drawBezelWithFrame: (NSRect) frame inView: (NSView *) controlView cela fonctionne! – tomeron11
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
Honte droit? :) Pas comme la méthode de commodité dans UIButton est vraiment pratique. – BadPirate