NSButton в NSToolbarItem (setView) при нажатии в «Только текст» переключает режим в «Значок и метку» - PullRequest
7 голосов
/ 03 августа 2010

Я пытаюсь воссоздать приятные текстурированные кнопки, такие как Finder, Safari и Transmission, на их панели инструментов.Сначала я просто перетащил «кнопку текстуры» в IB и все такое.Все работает хорошо, за исключением случаев, когда пользователь переводит панель инструментов в режим «Только текст».Когда он затем нажимает кнопку, панель инструментов включит «Значок и метку» самостоятельно.Я удалил все коды и делегаты с панели инструментов, чтобы убедиться, что это не проблема с кодом.

Затем, просто чтобы убедиться, что я создал новый проект (без кода вообще), и я могу воспроизвести проблемус чистым NSWindow с NSToolbar с одним NSToolbarItem с NSButton в нем.

Добавление NSButtons с помощью кода, подобного:

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

Но это также имеет тот же эффект: когда я нажимаюNSToolbarItem с NSButton в нем в «текстовом режиме». Сама панель инструментов переводит режим в «Значок и текст».

У вас есть идеи, как я могу заставить его работать правильно или, возможно, у вас есть альтернатива созданиюкрасивые панели инструментов, такие как Safari и т. д. есть?

1 Ответ

8 голосов
/ 04 октября 2010

Вам необходимо добавить представление меню для каждого NSToolbarItem, который имеет настраиваемое представление.Ниже строки, где вы размещаете NSToolbarItem, добавьте это:

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

Пока цель является действительной, ваши элементы должны оставаться в виде текстовых кнопок;в противном случае они будут отключены.См. Настройка представления элемента панели инструментов .

Обычно вам также необходимо реализовать validateToolbarItem: в вашей цели, но для элементов пользовательского представления вам вместо этого нужно переопределить validate: чтобы сделать что-то подходящее.См. Проверка элементов панели инструментов .

...