2010-09-17 9 views

risposta

7

Avevo bisogno di avere uno sfondo personalizzato, ecco come l'ho fatto. Ho fatto una sottoclasse NSButton e calpestato drawRect metodo:

- (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]; 
} 

Poi ho potuto mettere i tasti usando Interface Builder, e per ottenere i grafici su ordinazione mi resta che cambiare la classe alla mia nuova sottoclasse.

1

NSButton non ha gli stessi metodi di convenienza per le immagini di sfondo come UIButton (che è strano ed ecco sperare che Apple colmi tale divario). Dovrai creare un pulsante personalizzato la mia sottoclasse NSView e gestire la larghezza e gli angoli variabili da soli. Non penso che sarà facile, ma non penso che sarebbe terribilmente difficile neanche.

+0

Vergogna giusto? :) Non come il metodo di convenienza in UIButton è davvero così conveniente. – BadPirate

2

questo ha funzionato perfettamente bene per me:

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

dopo aver sovrascritto drawBezelWithFrame: (NSRect) frame inView: (NSView *) controlView funziona! – tomeron11