Как создать отфильтрованный набор доступных имен семейств шрифтов? (как в 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)

вот мой код, чтобы сэкономить время

Другие вопросы по тегам