2011-07-20 9 views
4

私のアプリでNSColorWellを使用する方法を見てきましたが、そこに多くのドキュメントがないようです。NSColorWellの変更された選択を検出する

カラーピッカー(NSColorWell/NSColorPanelなど)を私のビューに直接埋め込む方法はありますか?ウェルをクリックすると、常に新しいカラーピッキングウィンドウが表示されます。これは何とか埋め込むことはできますか?

私はNSColorWellから色を渡しているカスタムNSButtonクラスを持っています。これを行うには、ユーザーに色を選択させてから、この色をカスタムクラスに送信するボタンをクリックする必要があります。カラーピッカーから直接新しい色が選択されたときを簡単に検出する方法はありますか?

答えて

6

問題1の場合、それはNSColorWellのシステム動作です。それが好きではないですか?あなた自身を作る。

問題2には2つの解決策があります。

方法1:IBのカラーウェルからオブジェクトにアクションを接続し、クラスのコンセントからカラーウェルの色を読み取ります。ウェルの色が変わると、選択したセレクターにメッセージが送信されます。

方法2:任意の色の変化は、そのメソッドをトリガーする

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context 

を実装し、その後

[colorwell addObserver:self forKeyPath:@"color" options:0 context:NULL]; 

colorプロパティにオブザーバーとして、独自のオブジェクトを追加します。

deallocまたは別の内訳方法でカラーウェルから切り離してください:

[colorwell removeObserver:self forKeyPath:@"color"] 

あり、同様のバインディングでそれを行うための方法ですが、これらの二人は大丈夫です。

+0

方法2が魅力の作品を、ありがとう!問題1については、問題ではないと思いました。 –

0

カラーパネルの問題については、私もそのようなことを探していました。私が見つけることができた閉鎖はCocoaControlsのものでした。残念ながら、これは10.7+(NSPopoverを使用するため)でのみ動作し、プライベートAPIを使用するように見えます。 SWIFT 2の場合

1

私はこのコードを使用します

@IBOutlet weak var colorSelector: NSColorWell! 

    override func viewDidAppear() { 
     super.viewDidAppear() 

     self.colorSelector.addObserver(self, forKeyPath: "color", options: .New, context: nil) 

    } 

    override func viewDidDisappear(){ 
     super.viewDidDisappear() 

     self.colorSelector.removeObserver(self, forKeyPath:"color") 
    } 

    override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) { 
     print("keyPath=>\(keyPath)") 

     if (keyPath! == "color") { 
      print("object=>\(self.colorSelector.color)") 
     } 
    } 
関連する問題