2015-05-12 2 views
2

Как создать NSPopupButton со списком семейств шрифтов, где каждый элемент имеет свой собственный шрифт, как показано на скриншоте. Я хочу использовать привязки для достижения этого.NSPopButton со списком семейств шрифтов

Я могу заполнить NSPopupButton, привязывая содержимое NSPopupButton к значению, возвращаемому [[NSFontManager sharedFontManager] availableFontFamilies], но я не могу понять, как получить каждую отдельную строку в своем собственном шрифте?

enter image description here

+0

Если вы должны использовать привязки, вы можете иметь '' NSArray' из NSFont's и создать 'NSValueTransformer' создать' NSAttributedString', как и в [ответ Эля помидора] (HTTP: // StackOverflow. com/a/30189936/573976) из объекта NSFont. – Jesper

ответ

3

Я не был уверен, что смогу это сделать, но следующий, кажется, работает.

// fontPopup1 is an instance of NSPopupMenu 
NSMenu *menu = [[NSMenu alloc] init]; 
NSArray *familyNames = [[NSFontManager sharedFontManager] availableFontFamilies]; 
NSMutableArray *fontArray = [[NSMutableArray alloc] initWithObjects:nil]; 
for (NSString *family in familyNames) { 
    [fontArray addObject:family]; 
} 
for (NSInteger i2 = 0; i2 < fontArray.count; i2++) { 
    NSString *family = [fontArray objectAtIndex:i2]; 
    NSMutableAttributedString *attrStr =[[NSMutableAttributedString alloc]initWithString:family]; 
    CGFloat fontSize = [NSFont systemFontSize]; 
    [attrStr addAttribute:NSFontAttributeName value:[NSFont fontWithName:family size:fontSize] range:NSMakeRange(0,family.length)]; 
    NSMenuItem *menuItem = [[NSMenuItem alloc] init]; 
    [menuItem setAttributedTitle:attrStr]; 
    [menu addItem:menuItem]; 
} 
[fontPopup1 setMenu:menu]; 
Смежные вопросы