NSToolbarItemGroup - не работает?

NSToolbarItemGroup задокументирован здесь. Я не могу найти гораздо больше, чем об этом!

Я пытаюсь использовать его, чтобы посмотреть, как он выглядит. Мой код в основном взят прямо из документации. Однако я никогда не вижу «группу» на своей панели инструментов. Код запускается, элемент добавляется на панель инструментов, но его просто не видно?!

Кто-нибудь имел успех в использовании этого? Среда 10.8.3 с последним XCode.

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

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

- (NSToolbarItem *)toolbar:(NSToolbar *)toolbar itemForItemIdentifier:(NSString *)itemIdentifier willBeInsertedIntoToolbar:(BOOL)flag
{
    NSToolbarItem *item1 = [[NSToolbarItem alloc] initWithItemIdentifier:@"Item1"];
    NSToolbarItem *item2 = [[NSToolbarItem alloc] initWithItemIdentifier:@"Item2"];
    [item1 setImage:[NSImage imageNamed:NSImageNameQuickLookTemplate]];
    [item2 setImage:[NSImage imageNamed:NSImageNameQuickLookTemplate]];
    [item1 setLabel:@"Prev"];
    [item2 setLabel:@"Next"];

    NSToolbarItemGroup *group = [[NSToolbarItemGroup alloc] initWithItemIdentifier:@"GroupItem"];
    [group setSubitems:[NSArray arrayWithObjects:item1, item2, nil]];

    [group setLabel:@"Navigate"];

    return group;
}

person TheNextman    schedule 11.04.2013    source источник


Ответы (1)


Я тоже столкнулся с этим. Это раздражает. Моя проблема заключалась в том, что мне нужно было явно установить minSize и maxSize каждого элемента и содержащей его группы. Возможно, это сработает:

- (NSToolbarItem *)toolbar:(NSToolbar *)toolbar itemForItemIdentifier:(NSString *)itemIdentifier willBeInsertedIntoToolbar:(BOOL)flag
{
    NSToolbarItem* retVal = nil;

    if ([@"GroupItem" isEqual: itemIdentifier])
    {
        NSToolbarItem *item1 = [[NSToolbarItem alloc] initWithItemIdentifier:@"Item1"];
        NSToolbarItem *item2 = [[NSToolbarItem alloc] initWithItemIdentifier:@"Item2"];

        NSToolbarItemGroup *group = [[NSToolbarItemGroup alloc] initWithItemIdentifier:@"GroupItem"];
        [group setSubitems:[NSArray arrayWithObjects:item1, item2, nil]];

        item1.image = [NSImage imageNamed:NSImageNameQuickLookTemplate];
        item1.minSize = item1.image.size;
        item1.maxSize = item1.image.size;
        item1.label = @"Prev";

        item2.image = [NSImage imageNamed:NSImageNameQuickLookTemplate];
        item2.minSize = item2.image.size;
        item2.maxSize = item2.image.size;
        item2.label = @"Next";


        group.label = @"Navigate";
        NSSize minSize = NSZeroSize;
        NSSize maxSize = NSZeroSize;
        for (NSToolbarItem* item in group.subitems)
        {
            minSize.width += item.minSize.width;
            minSize.height = MAX(minSize.height, item.minSize.height);
            maxSize.width += item.maxSize.width;
            maxSize.height = MAX(maxSize.height, item.maxSize.height);
        }
        group.minSize = minSize;
        group.maxSize = maxSize;

        retVal = group;
    }
    return retVal;
}

Мне кажется глупым, что это не поведение по умолчанию, но это не помешало мне потратить полчаса на то, чтобы понять это. Кроме того, следите за порядком — если вы установите минимальный и максимальный размер подэлементов перед помещением их в коллекцию подэлементов группы, группа сбросит размеры для вас до 32x32. . Гррр.

person ipmcc    schedule 18.05.2013