2013-03-03 4 views
8

Vorrei aggiungere un cursore di opacità a NSColorPanel mostrato per 1 specifico NSColorWell. Tutti gli altri pozzi di colore non dovrebbero mostrare il cursore di opacità.Aggiungi il cursore dell'opacità al pannello colorato per un solo colore ma non altri

So che posso impostare questo per i sharedColorPanel in questo modo:

[[NSColorPanel sharedColorPanel] setShowsAlpha:YES]; 

Ma come faccio a fare questo quando voglio solo questo comportamento per un unico colore bene?

Ho provato ad aggiungere un IBAction, ma questa IBAction non viene chiamata quando si fa clic sul colore. (Quindi non posso apportare modifiche prima che venga visualizzato il pannello). Viene chiamato quando si sceglie un altro colore nel pannello dei colori.

risposta

10

OK, ecco il codice che funziona. Impostare la classe colorwell in IB per AlphaColorWell: **

@implementation AlphaColorWell 

- (void)activate:(BOOL)exclusive 
{ 
    [[NSColorPanel sharedColorPanel] setShowsAlpha:YES]; 
    [super activate:exclusive]; 
} 

- (void)deactivate 
{ 
    [super deactivate]; 
    [[NSColorPanel sharedColorPanel] setShowsAlpha:NO]; 
} 

@end 
+0

Questa dovrebbe essere la risposta accettata. – Klaas

1

La risposta, come quella che riguarda la maggior parte degli AppKit, è la sottoclasse.

@interface AlphaColorPanel : NSColorPanel 

@end 

@implementation AlphaColorPanel 

- (BOOL)showsAlpha { 
    return YES; 
} 

@end 

andare poi in IB e sostituire la classe del pannello colore singolare che si desidera mostrare il cursore alpha.

+0

Grazie, ma come faccio a impostare il NSColorPanel per un NSColorWell? Posso cambiare il nome della classe NSColorWell, ma non vedo alcuna opzione per cambiare la classe NSColorPanel per quel colore. – Wesley

+2

Sembra che io possa sottoclasse NSColorWell e sovrascrivi il metodo activate: e deactivate :. Questo probabilmente farà il trucco. Grazie. – Wesley

0
class ANColorWell: NSColorWell { 
override func activate(_ exclusive: Bool) { 
    NSColorPanel.shared.showsAlpha = true; 
    super.activate(exclusive); 
} 

override func deactivate() { 
    NSColorPanel.shared.showsAlpha = false; 
    super.deactivate(); 

} 
} 

Questa è la versione swift4.0 ho provato, che spero possa essere utile a voi

Problemi correlati