Cocoa覚書 : 使用可能なフォント一覧表示

というわけで、予告通り、Cocoa覚書を再開します。すべての情報に関して一切責任はおいません。まずは、旧ページのものを。。。


わざわざフォントパネルを開くほどのことじゃないけども、とにかくフォントの一覧をメニュー形式で表示して選択できるようにしたい、ということ。
基本的にはこういう感じです。

NSFontManager *fontManager = [NSFontManager sharedFontManager];
NSMutableArray *fontArr = 
    [NSMutableArray arrayWithArray:[fontManager availableFontFamilies]];

これで、まずはフォントファミリー(ここではフォントファミリーの取得だけに限ってます)の一覧がfontArrにNSArrayの形で入ります。Mutableなのはソートしやすく、のため。(といってももちろんNSArrayのままでもソートは可能)
英語名のままでよければ、これをソートして(しなくてもいいけど)なにかしらのメニューに登録すればいいだけ、になります。アウトレットに直接アクセスするもよし、Cocoa Bindingをつかうもよし、ですね。
で、問題なのが、日本語名へのローカライズ。これは、ようするに、

[NSFontManager localizedNameForFamily:aString face:aFace];

でいいらしい。aStringがフォントファミリーの英語名で、aFaceはその種類。ここではファミリーだけを考えているからaFace=nilで大丈夫。つまりfontArrの内容を、全部これで書き換えてあげればよいのです。面倒だから、もう一つfontArrJというNSMutableArrayを作って、

NSEnumerator *enume = [fontArr objectEnumerator];
id obj;
while (obj = [enume nextObject]) {
    [fontArrJ addObject:
        [fontManager localizedNameForFamily:obj face:nil]];
}

こんな感じでどうでしょう。これをメニューに登録すればおしまい。ちなみに、ソートはこういうふうにどうぞ。

[fontArr sortUsingSelector:@selector(caseInsensitiveCompare:)];