2013-04-11 5 views
1

NSToolbarItemGroup задокументирована here. Я не могу найти больше, чем об этом!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; 
} 

ответ

5

Я столкнулся с этим тоже. Это раздражает. Моя проблема заключалась в том, что мне нужно было явно установить 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; 
} 

Кажется глупо мне, что это не по умолчанию поведения, но это не помешало мне тратить полчаса вычисляя его. Кроме того, следите за заказом - если вы установите подынты min и max размером до, положив их в коллекцию подэлементов группы, группа будет сбросить размеры для вас до 32x32. Хмм.