2013-03-03 33 views
8

我想添加一個不透明滑塊到NSColorPanel顯示爲1具體NSColorWell。所有其他顏色的井不應顯示不透明度滑塊。添加不透明度滑塊到顏色面板的一種顏色,但不是別人

我知道我可以設置此像這樣sharedColorPanel:

[[NSColorPanel sharedColorPanel] setShowsAlpha:YES]; 

但我怎麼做到這一點的時候,我只希望這種行爲的單一顏色呢?

我試着添加一個IBAction,但是當你點擊顏色的時候不會調用這個IBAction。 (所以我不能在面板顯示之前做任何改變)。當您在顏色面板中選擇另一種顏色時會調用它。

回答

10

好的,這裏是可用的代碼。在IB的colorwell類爲AlphaColorWell:**

@implementation AlphaColorWell 

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

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

@end 
+0

這應該是被接受的答案。 – Klaas 2016-07-05 10:52:33

1

答案就像處理大部分AppKit一樣,就是子類。

@interface AlphaColorPanel : NSColorPanel 

@end 

@implementation AlphaColorPanel 

- (BOOL)showsAlpha { 
    return YES; 
} 

@end 

然後進入IB並重寫要顯示alpha滑塊的奇異彩色面板的類。

+0

謝謝,但我怎麼設置NSColorPanel的NSColorWell?我可以更改NSColorWell類的名稱,但沒有看到任何可以更改NSColorPanel類的顏色。 – Wesley 2013-03-03 19:59:26

+2

看起來我可以繼承NSColorWell並覆蓋activate:和deactivate:方法。這可能會訣竅。謝謝。 – Wesley 2013-03-03 20:02:13

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(); 

} 
} 

這是swift4.0版本的我試過了,我希望這將是對你有用