2013-03-03 5 views
8

Ich möchte dem NSColorPanel einen Deckkraft-Schieberegler hinzufügen, der für ein bestimmtes NSColorWell angezeigt wird. Bei allen anderen Farbquellen sollte der Deckkraft-Schieberegler nicht angezeigt werden.Fügen Sie den Deckkraft-Schieberegler dem Farbfeld für eine Farbe hinzu, aber nicht für andere.

Ich weiß, dass ich dies für die sharedColorPanel wie so einstellen:

[[NSColorPanel sharedColorPanel] setShowsAlpha:YES]; 

Aber wie kann ich dies tun, wenn ich nur gut dieses Verhalten für eine einzelne Farbe wünschen?

Ich habe versucht, eine IBAction hinzuzufügen, aber diese IBAction wird nicht aufgerufen, wenn Sie auf die Farbe klicken. (Ich kann also keine Änderungen vornehmen, bevor das Panel angezeigt wird). Es wird aufgerufen, wenn Sie im Farbfeld eine andere Farbe auswählen.

Antwort

10

OK, hier ist der Code, der funktioniert. Stellen Sie die colorwell Klasse in IB zu AlphaColorWell: **

@implementation AlphaColorWell 

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

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

@end 
+0

Dies sollte die akzeptierte Antwort sein. – Klaas

1

Die Antwort, wie der Umgang mit den meisten AppKit, ist die Unterklasse.

@interface AlphaColorPanel : NSColorPanel 

@end 

@implementation AlphaColorPanel 

- (BOOL)showsAlpha { 
    return YES; 
} 

@end 

Dann gehen Sie in IB und überschreiben Sie die Klasse der einzelnen Farbpalette, die Sie den Alpha-Schieberegler anzeigen möchten.

+0

Dank nützlich sein, aber wie stelle ich die NSColorPanel für ein NSColorWell? Ich kann den Klassennamen NSColorWell ändern, sehe aber keine Option, um die NSColorPanel-Klasse für diese Farbe zu ändern. – Wesley

+2

Sieht so aus, als könnte ich NSColorWell ableiten und die Methode activate: und deactivate: überschreiben. Das wird wahrscheinlich den Trick machen. Vielen Dank. – 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(); 

} 
} 

Dies ist die swift4.0 Version habe ich versucht, die hoffentlich wird Ihnen

Verwandte Themen