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.

War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top