Я собираюсь предложить ответ в Objective-C, потому что я не знаком со Swift.Извините ... Вы должны быть в состоянии перевести это достаточно легко, хотя, или я уверен, что кто-то здесь может сделать это.
Итак, мне удалось это сделать, создав подкласс NSMenu с помощью следующего метода:
@implementation MenuWithSections
- (NSMenuItem*)insertItemWithTitle:(NSString*)aString action:(SEL)aSelector keyEquivalent:(NSString*)keyEquiv atIndex:(NSInteger)index
{
NSMenuItem * item;
NSString * adjustedString;
if ([aString isEqualToString:menuDividerString]) {
NSMenuItem *separator = [NSMenuItem separatorItem];
[self insertItem:separator atIndex:index];
return separator;
} else if ([aString hasPrefix:menuSectionHeaderPrefix]) {
adjustedString = [[aString substringFromIndex:menuSectionHeaderPrefix.length] capitalizedString];
NSMenuItem * sectionHead = [[NSMenuItem alloc] initWithTitle:adjustedString
action:nil
keyEquivalent:@""];
sectionHead.enabled = NO;
sectionHead.indentationLevel = 0;
[self insertItem:sectionHead atIndex:index];
return sectionHead;
}
item = [super insertItemWithTitle:aString action:aSelector keyEquivalent:keyEquiv atIndex:index];
item.indentationLevel = 1;
return item;
}
@end
menuDividerString
в моем случае - @ "----", а menuSectionHeaderPrefix
- @ "..";см. примеры ниже.
Чтобы заставить его работать, сделайте три вещи:
В IB разверните всплывающую кнопку, пока не увидите ее меню, и установите классменю в «MenuWithSections». раскрывающаяся всплывающая кнопка
Отключить функцию «автоматического включения» всплывающей кнопки (отключите ее на вкладке «Атрибуты» IB или установите значение «НЕТ»).программно)
- Передайте измененные строки, используя вышеуказанные константы, чтобы получить желаемый эффект.
Другими словами, чтобы получить желаемый вид вашего вопроса, передайте заголовки всплывающих кнопок следующим образом:
[self.popbutton addItemsWithTitles:@[ @"..swedish cars", @"Volvo", @"Saab", @"..German cars", @"Mercedes", @"Audi"]];
секционное всплывающее окно
или если вы хотите разделительную линию между двумя группами, используйте:
[self.popbutton addItemsWithTitles:@[ @"..swedish cars", @"Volvo", @"Saab", @"----", @"..German cars", @"Mercedes", @"Audi"]];
секционное всплывающее окно с разделителем