如何使用NSAttributedString创建下标

时间:2010-02-03 19:34:56

标签: cocoa nsattributedstring

我看到NSAttributedString有一个上标的特定属性,但我找不到一个下标。使用NSAttributedString创建下标字符的一般做法是什么?

示例:H2O

2 个答案:

答案 0 :(得分:5)

尝试使用负值NSSuperscriptAttributeName

如果做不到这一点,那就很难用字符串中的[Ο1225 5]替换[0123456789]字符。

答案 1 :(得分:2)

我努力使用NSMutableAttributedString中的下标/上标一段时间,因为最基本的解决方案需要为每个想要下标的字符输入NSRange。当然,有一种更自动的做事方式吗?

嗯,是的,但它需要一点点工作。

我的方法是在NSString中指明下标,上标,斜体等字符,方法是用%符号包围要改变的文本,然后是关于应该进行什么类型的字体调整的信息,例如: '第二个粒子上的力由f-subscript-b'将在我的计划中写出@"第二个粒子上的力由f%& sb%"给出。

然后我使用方便的方法:

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

将字符串切割成由%符号分隔的子字符串,例如

@" Hello%& Bhow是%?" - >包含元素的数组:@" Hello",@"& Bhow是",@"你?"

然后我检查数组中每个元素的第一个字符,看它是否包含& mark,我用来表示下一个字符是B = Bold,S = Superscript,I = italics等。

因此,在上面的例子中,子串@"& Bhow是"旨在转换为粗体字符串" 如何"输入@" Hello%& Bhow是%?"是否打算转换为"您好如何您?"。

所有字体修改都是使用NSMutableAttributedString及其相关方法执行的,最后所有NSMutableAttributedString子字符串都可以使用&appendAttributedString'等方法粘贴在一起。

如果有人感兴趣,我的代码如下:

-(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然后将其附加到变量&#39; attribString&#39;。

我可能不是最好的方法,但至少它表明,通过一些工作,你可以在Cocoa中自动化下标和上标。