2010-09-17 7 views

Antwort

7

Ich brauchte eine benutzerdefinierte Schaltfläche Hintergrund, hier ist, wie ich es gemacht habe. 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 eigenen Grafiken bekommen muß ich nur noch die Klasse zu meiner neuen Unterklasse ändern.

1

NSButton hat nicht die gleichen Komfort-Methoden für Hintergrundbilder wie UIButton (was ist seltsam, und hier ist zu hoffen, dass Apple Brücken, die Lücke). Sie müssen eine benutzerdefinierte Schaltfläche meiner Unterklasse NSView erstellen und die variable Breite und Ecken selbst behandeln. Ich denke nicht, dass es einfach wird, aber ich denke auch nicht, dass es sehr schwierig wäre.

+0

Shame nicht wahr? :) Nicht wie die Bequemlichkeitsmethode in UIButton ist wirklich so praktisch. – BadPirate

2

dies ist für mich völlig in Ordnung:

[self.addBuddyCommitButton.cell setBezelStyle:NSRoundedBezelStyle]; 
+0

nach dem Überschreiben von drawBezelWithFrame: (NSRect) Frame inView: (NSView *) controlView es funktioniert! – tomeron11

0

Dieses Video ein Verfahren erklärt, die einfach zu sein scheint und erfordert nur ein Bild der Schaltfläche: http://youtu.be/7MZJxPOo_xU