NSButton mit variabler Größe Breite, abgerundeten Ecken
Frage
Was ist der beste Weg, um eine NSButton mit einem benutzerdefinierten Hintergrundbild zu schaffen, das in der Lage ist, variable Breite aufweist, ohne dass die Ecke Lünette Blick gestreckt? Ich weiß, es gibt bequeme Methoden dies mit UIButton zu tun: http: / /jainmarket.blogspot.com/2009/04/create-uibuttonbutton-with-images.html aber ich habe nichts Vergleichbares in NSButton gesehen.
Lösung
Ich brauchte eine benutzerdefinierte Schaltfläche Hintergrund haben, ist hier, wie ich es tat. Ich machte eine NSButton Unterklasse und overrode drawRect Methode:
- (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];
}
Dann könnte ich mit den Tasten Interface Builder setzen und die eigene Grafiken bekommen muss ich nur noch die Klasse zu meiner neuen Unterklasse ändern.
Andere Tipps
Dies ist völlig in Ordnung für mich:
[self.addBuddyCommitButton.cell setBezelStyle:NSRoundedBezelStyle];
NSButton
haben nicht die gleichen Komfortmethoden für Hintergrundbilder als UIButton
(die ungerade ist und hier ist zu hoffen, von Apple die Lücke überbrückt). Sie erhalten eine benutzerdefinierte Schaltfläche erstellen müssen meine Subklassen NSView
und die Handhabung der mit variabler Breite und Ecken selbst. Ich glaube nicht, es einfach sein wird, aber ich glaube nicht, dass es entweder furchtbar schwierig sein.
Dieses Video erklärt, eine Methode, die einfach zu sein scheint und erfordert nur ein Bild des Buttons an: http://youtu.be / 7MZJxPOo_xU