如何使用下标添加表视图节标题?

时间:2013-07-30 20:52:17

标签: ios objective-c cocoa-touch uitableview

在我的应用程序中,我有一个表格视图,我到目前为止已经使用故事板(我已经添加了部分:行:单元格等等所有通过故事板),我以编程方式进行的唯一更改是添加{ {1}}通过实施:

作为标题之一
UIButton

我目前的困境是我必须添加一个包含下标的节头,即:H2O image of a checmical formula with subscripts

我无法直接在故事板检查器中添加下标,有人可以告诉我这样做的方法是什么?

我查看了this question,但它并不是我想要的,因为我需要能够将它添加到我的节标题中。

2 个答案:

答案 0 :(得分:4)

一个简单的解决方案是使用Unicode下标范围,U + 2080到U + 2089。例:2 H 2 + O 2 - > 2。 2 H 2 O.

您可以使用Unicode Hex Input键盘布局,按住Option键并输入十六进制数字(例如hold选项并输入“20”代表“0”)来键入其中一个字符。

给定一个数字,您可以将其格式化为字符串作为下标,如下所示:

static const unichar kSubscriptZero = 0x2080;
int numberOfHydrogens = 2;
NSString *water = [NSString stringWithFormat:@"H%CO",
    kSubscriptZero + numberOfHydrogens];

http://www.unicode.org/charts/PDF/U2070.pdf

答案 1 :(得分:1)

我认为这是你使用属性字符串做什么的要点。我现在面前没有Xcode,所以可能存在错误:

if (section == whicheverSectionIndexIsCorrect) {
    NSString *plainText = @"2H2 + O2 → 2H2O";
    id subscriptOffset = @(-0.5); // random guess here, adjust offset as needed

    NSMutableAttributedString *text = [[NSMutableAttributedString alloc] initWithString:plainText];

    // apply attributes for each character to subscript
    [text addAttribute:(NSString *)kCTSuperscriptAttributeName 
                 value:subscriptOffset
                 range:NSMakeRange(2, 1)];
    [text addAttribute:(NSString *)kCTSuperscriptAttributeName
                 value:subscriptOffset
                 range:NSMakeRange(7, 1)];
    // etc.

    UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 64)];
    UILabel *label = [[UILabel alloc] init];
    label.attributedText = text;
    [view addSubview:label];
    return view;
}

编辑:可能仅在OS X上可用:我还注意到有NSAttributedString initializers that take HTML。我没有使用它,所以不能说它是否会起作用,但如果它在iOS中工作并理解下标,那么如果你从数据存储加载这些下标标签而不是硬编码它们可能会更简单。 / p>