2013-03-03 7 views
8

Я хотел бы добавить слайдер прозрачности в NSColorPanel, который показан для 1 конкретного NSColorWell. Все остальные цветные колодцы не должны показывать слайдер непрозрачности.Добавьте ползунок прозрачности к цветной панели для одного цвета, но не другие

Я знаю, что я могу установить это для sharedColorPanel как так:

[[NSColorPanel sharedColorPanel] setShowsAlpha:YES]; 

Но как я могу это сделать, когда я только хочу это поведение для одного цвета хорошо?

Я попытался добавить IBAction, но этот IBAction не вызывается, когда вы щелкаете цветом. (Таким образом, я не могу внести никаких изменений до отображения панели). Он вызывается, когда вы выбираете другой цвет на цветной панели.

ответ

10

ОК, вот код, который работает. Установите класс colorwell в IB к 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

1

Ответ, как и дело с большинством AppKit, относится к подклассу.

@interface AlphaColorPanel : NSColorPanel 

@end 

@implementation AlphaColorPanel 

- (BOOL)showsAlpha { 
    return YES; 
} 

@end 

Затем перейдите в IB и переопределите класс уникальной цветной панели, которую вы хотите показать альфа-слайдер.

+0

Спасибо, но как я установил NSColorPanel для NSColorWell? Я могу изменить имя класса NSColorWell, но не вижу возможности изменить класс NSColorPanel для этого цвета. – Wesley

+2

Похоже, я могу подклассировать NSColorWell и переопределить метод activate: and deactivate:. Это, вероятно, сделает трюк. Благодарю. – 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(); 

} 
} 

Это swift4.0 версию я попробовал, что я надеюсь, будет полезным для вас