9

Finder、Safari、Transmissionなどの素敵なテクスチャボタンをツールバーに再現しようとしています。まず、IBなどの「テクスチャボタン」をドラッグするだけから始めました。ユーザーがツールバーを「テキストのみ」モードに設定した場合を除いて、すべてが正常に機能します。次に彼がボタンをクリックすると、ツールバーはそれ自体で「アイコンとラベル」を有効にします。コードの問題ではないことを確認するために、ツールバーからすべてのコードとデリゲートを削除しました。

次に、念のため、新しいプロジェクトを作成し(コードはまったくありません)、NSButtonを含む1つのNSToolbarItemを含むNSToolbarを含むクリーンなNSWindowで問題を再現できます。

次のようなコードを介してNSButtonを追加します。

- (NSArray*)toolbarAllowedItemIdentifiers:(NSToolbar*)toolbar {
    return [NSArray arrayWithObject:@"myToolbarMenu"];
}

- (NSArray*)toolbarDefaultItemIdentifiers:(NSToolbar*)toolbar {
    return [self toolbarAllowedItemIdentifiers:toolbar];
}

- (NSToolbarItem*)toolbar:(NSToolbar*)toolbar
    itemForItemIdentifier:(NSString*)str
willBeInsertedIntoToolbar:(BOOL)flag
{
    if ([str isEqualToString:@"myToolbarItem"] == YES) {
        NSToolbarItem* item = [[NSToolbarItem alloc] initWithItemIdentifier:str];
        [item setView:[[NSButton alloc] init]];
         [item setMinSize:NSMakeSize(50,50)];
        [item setMaxSize:NSMakeSize(50,50)];
        [item setLabel:@"Text"];
        return [item autorelease];  
    }
    return nil;
}

ただし、これにも同じ効果があります。「テキストのみのモード」でNSButtonを含むNSToolbarItemを押すと、ツールバー自体がそのモードを「アイコンとテキスト」に強制します。

どうすれば正しく動作させることができるのか、Safariなどの見栄えの良いツールバーアイテムを作成する代わりの方法があるのでしょうか。

4

1 に答える 1

11

カスタムビューを持つ各NSToolbarItemにメニュー表現を追加する必要があります。NSToolbarItemを割り当てる行の下に、次を追加します。

NSMenuItem *menuRep = [[NSMenuItem alloc] initWithTitle:@"Text" action:@selector(targetMethod:) keyEquivalent:@""];
[menuRep setTarget:<target>];
[item setMenuFormRepresentation:menuRep];

ターゲットが有効である限り、アイテムはテキストのみのボタンのままにする必要があります。それ以外の場合は無効になります。ツールバーアイテムの表現の設定を参照してください。

通常、ターゲットにvalidateToolbarItem:を実装する必要もありますが、カスタムビューアイテムの場合は、代わりにvalidate:をオーバーライドして適切な処理を行う必要があります。ツールバー項目の検証を参照してください。

于 2010-10-04T16:05:33.610 に答える