2010-09-17 13 views

Répondre

7

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.

1

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.

+0

Honte droit? :) Pas comme la méthode de commodité dans UIButton est vraiment pratique. – BadPirate

2

cela a fonctionné parfaitement bien pour moi:

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

après avoir écrasé drawBezelWithFrame: (NSRect) frame inView: (NSView *) controlView cela fonctionne! – tomeron11