1

popupbutton コントロール ( NSPopupButton )でライブ フォントを表示することは可能でしょうか? 現在、次の方法で使用可能なフォントのリストを含む popupbutton をロードします。

NSArray *familyNames = [[NSFontManager sharedFontManager] availableFontFamilies];
NSMutableArray *fontarray = [[NSMutableArray alloc] initWithObjects:nil];
[fontarray addObject:@"- Select one - "];
for (NSString *family in familyNames) {
    [fontarray addObject:family];
}
[fontmenu1p addItemsWithTitles:fontarray];

たぶん、NSMutableAttributedString を使用して、次のようなものですか?

for (NSString *family in familyNames) {
    NSDictionary *attr1 = [NSDictionary dictionaryWithObjectsAndKeys:[NSFont fontWithName:family size:[NSFont systemFontSize]],NSFontAttributeName,[NSColor blackColor],NSForegroundColorAttributeName,nil];
    NSMutableAttributedString *aString = [[NSMutableAttributedString alloc] initWithString:family];
    [aString setAttributes:attr1 range:NSMakeRange(0,family.length-1)];
    [fontarray addObject:aString];
}
[fontmenu1p addItemsWithTitles:fontarray];

範囲外のエラーが発生します。私のアプローチが正しいかどうかはわかりません。popupbutton コントロールがスタイル付きテキストをサポートしているかどうかさえわかりません。

ご協力ありがとうございました。

4

1 に答える 1

3

私はそれをテストしませんでしたが、私たちのアプローチはうまくいかないと思います。NSPopUpButton には、メニュー用の便利な API があります。便利だけど短い。(通常、ポップアップ アイテムには属性がなく、別のビューなどもありません。)

アイテムごとにNSMenuItemのインスタンスを構築しようとします。属性付き文字列を設定できるセッター-setAttributedTitle:があります。次に、これをNSMenuのインスタンスに集約し、メニューをポップアップ ボタンに設定する必要があります。

ところで: [aString setAttributes:attr1 range:NSMakeRange(0,family.length-1)]; なぜ-1?長さは長さであり、最後の文字のインデックスではありません。また、最後の文字のインデックスではなく、長さを取る範囲を設定したいと考えています。

于 2013-06-22T17:25:35.670 に答える