というわけで、予告通り、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:)];