Как создать отфильтрованный набор доступных имен семейств шрифтов? (как в Pages или TextEdit)
Я хочу создать всплывающую кнопку, например, в Pages.app (или в TextEdit.app), меню которой представляет собой отфильтрованный список семейств шрифтов.
Я могу получить массив доступных имен семейства шрифтов из [NSFontManager availableFontFamilies]
, но это обеспечивает гораздо больше семейств шрифтов, чем во всплывающем меню Pages.
С другой стороны, я могу получить отфильтрованный набор дескрипторов шрифтов [NSFontCollection fontCollectionWithName:NSFontCollectionUser]
, но это также касается каждого члена семьи (курсив, полужирный и т. д.). Я не хочу включать каждого участника в моем всплывающем окне, только фамилии.
Я хочу отфильтрованный набор фамилий.
Имена, которые я получаю из NSFontManager
кажется очищенным для пользовательского интерфейса, тогда как значения имен я получаю из словаря атрибутов дескриптора шрифта ([myFontDescriptor fontAttributes][NSFontNameAttribute]
) не. Так что я не могу просто пересечь набор двух групп на основе строковых значений, одни и те же вещи могут иметь разные имена.
2 ответа
Ты можешь использовать -[NSFontDescriptor objectForKey:]
чтобы получить атрибуты, отсутствующие в -fontAttributes
толковый словарь. Если вы используете ключ атрибута NSFontFamilyAttribute
, что дает вам фамилию шрифта. Применяя это к каждому дескриптору шрифта в [NSFontCollection fontCollectionWithName:NSFontCollectionUser]
должен дать вам то, что вам нужно.
let collection = NSFontCollection(name: "Fixed Width")
var names = [String]()
for description in (collection?.matchingDescriptors)!{
let name = description.fontAttributes[NSFontNameAttribute] as! String
names.append(name)
}
print(names)
вот мой код, чтобы сэкономить время