6

NSAttributedString には上付き文字用の特定の属性があることがわかりますが、下付き文字用の属性が見つかりません。NSAttributedString を使用して下付き文字を作成する一般的な方法は何ですか?

例:H2O

4

2 に答える 2

5

NSSuperscriptAttributeName負の値で試してください。

それができない場合、文字列内の [0123456789] 文字を [₀₁₂₃₄₅₆₇₈₉] に置き換えるのは難しいでしょう。

于 2010-02-03T20:00:29.267 に答える
2

NSMutableAttributedString の下付き文字/上付き文字にしばらく苦労しました。これは、最も基本的な解決策では、下付きにする文字ごとに NSRange を入力する必要があるためです。確かに物事を行うためのより自動的な方法はありますか?

はい、ありますが、少し作業が必要です。

私の方法は、NSString で下付き文字、上付き文字、イタリック体などの文字を示すために、変更するテキストを % 記号で囲み、その後にどのタイプのフォント調整を行うべきかについての情報を続けます。は f-subscript-b' で与えられ、私のスキームでは @「2 番目の粒子にかかる力は f%&sb% で与えられる」と書かれます。

次に、便利な方法を使用します。

NSArray *substrings = [string componentsSeparatedByString:@"%"];

文字列を % 記号で区切られた部分文字列に分割します。

@"こんにちは %&Bお元気ですか%?" ->要素を含む配列: @"Hello",@"&Bhow are",@"you?"

次に、配列の各要素の最初の文字を調べて、& マークが含まれているかどうかを確認します。これを使用して、次の文字が B=太字、S=上付き文字、I=斜体などのいずれかになることを示します。

したがって、上記の例では、部分文字列 @"&Bhow are" は、太字の文字列 " how are " と入力 @"Hello %&Bhow are% you?"に変換されることを意図しています。「Hello how are you?」に変換されることを意図しています。

すべてのフォントの変更は、NSMutableAttributedString とそれに関連付けられたメソッドを使用して実行されます。最後に、「appendAttributedString」などのメソッドを使用して、すべての NSMutableAttributedString サブストリングを一緒に貼り付けることができます。

誰かが興味を持っている場合、私のコードは次のとおりです。

-(void) appendFontString:(NSMutableAttributedString*) attribString
                         :(NSString*) string{
    NSArray *substrings = [string componentsSeparatedByString:@"%"];
    for(int i=0;i<(int) [substrings count];i++){
        if([substrings[i] length]>0){
        NSString* firstCharacter=[substrings[i] substringToIndex:1];

        if([firstCharacter isEqualToString:@"&"]){
            NSString* fontType=[substrings[i] substringWithRange:NSMakeRange(1, 1)];

            //remove first two characters
            NSString* newSubString=[substrings[i] substringFromIndex:2];
            if([fontType isEqualToString:@"S"]){
            [self appendWithSuperscript:attribString :newSubString];
            } else if([fontType isEqualToString:@"s"]){
                [self appendWithSubscript:attribString :newSubString];
            } else if([fontType isEqualToString:@"B"]){
                [self appendWithBold:attribString :newSubString];
            } else if([fontType isEqualToString:@"I"]){
                [self appendWithItalics:attribString :newSubString];
            }
            } else{
            //regular string
            [self append:attribString :substrings[i]];
        }
        }
    }

}

ここで、appendWithBold などのメソッドは、NSString をフォーマットされたボールド/上付き/下付き/などに変換するユーザー作成のメソッドです。NSMutableAttributedString を作成し、それを変数「attribString」に追加します。

私の方法は最善の方法ではないかもしれませんが、少なくとも、少し作業すれば、Cocoa で下付き文字と上付き文字を自動化できることを示しています。

于 2012-11-08T00:03:19.540 に答える