2011-02-09 10 views
4

は、私は、カスタムツールバー項目でNSToolbarを持っており、また、フォントや色NSToolbarItem項目(NSToolbarShowFontsItemとNSToolbarShowColorsItem識別子)に建てられました。検証フォントと色NSToolbarItem項目

さまざまな状況でこれらを有効/無効にできる必要があります。問題はvalidateToolbarItem:で、これらのアイテムは呼び出されません(他のツールバーアイテムに対して呼び出されています)。

ドキュメントはこのことについて非常に明確ではありません。

ツールバーが自動的に をクリックし、それが 無効になっているときにそれを退色されたときに、画像アイテムを暗くする を気にかかります。あなたのコードが行うべきことは、 が項目を確認することです。イメージ項目 が有効なターゲット/アクションのペアを持っている場合は、 ツールバーが NSToolbarItemValidationの validateToolbarItemを呼び出します:ターゲットに ターゲットはそれを実装している場合。それ以外の場合は、デフォルトで アイテムが有効になります。

私はこれらの2つのツールバー項目のターゲット/アクションを明示的に設定していません。デフォルトの動作を使用したいと思います。これらのアイテムを検証できないということですか?それとも私がこれを行うことができる他の方法はありますか?

ありがとうございました。

答えて

1

いくつかの試行錯誤の末、私はこれを理解して妥当な回避策を見つけることができたと思います。私は、同じ問題に直面している他の人たちのために、ここですぐに答えを出す予定です。

これは、ココアのデザイン上の欠陥の1つです。 NSToolbarには、NSToolbarShowFontsItemとNSToolbarShowColorsItemのターゲット/アクションをNSApplicationに設定するためのハードコーディングされた動作があり、ドキュメンテーションのヒントとしてNSToolbarItemアイテムに対してvalidateToolbarItem:を呼び出さないようにします。

これらのツールバー項目を検証する必要がある場合は、デフォルトのフォント/色ツールバー項目を使用するのではなく、独自のロールを使用して同じNSApplicationアクション(下記参照)を呼び出します。

デフォルトのものを使用している場合、あなたのオブジェクトにそれらのターゲット/アクションをリダイレクトし、[今すぐvalidateToolbarItem:が呼び出されます、元のアクション

- (void) toolbarWillAddItem:(NSNotification *)notification { 
    NSToolbarItem *addedItem = [[notification userInfo] objectForKey: @"item"]; 
    if([[addedItem itemIdentifier] isEqual: NSToolbarShowFontsItemIdentifier]) {     
    [addedItem setTarget:self]; 
    [addedItem setAction:@selector(toolbarOpenFontPanel:)]; 
    } else if ([[addedItem itemIdentifier] isEqual: NSToolbarShowColorsItemIdentifier]) { 
    [addedItem setTarget:self]; 
    [addedItem setAction:@selector(toolbarOpenColorPanel:)]; 
    } 
} 

呼び出すことが可能です:

- (BOOL)validateToolbarItem:(NSToolbarItem *)theItem { 
    //validate item here 
} 

をそして、呼び出されるアクションは次のとおりです。

-(IBAction)toolbarOpenFontPanel:(id)sender { 
    [NSApp orderFrontFontPanel:sender]; 
} 

-(IBAction)toolbarOpenColorPanel:(id)sender { 
    [NSApp orderFrontColorPanel:sender]; 
} 

I gueこれを設計したエンジニアは、フォント/色のツールバー項目を検証したいとは思っていませんでした。 Go figure。

関連する問題