1

在我的应用程序中,我有一个表格视图,到目前为止我已经使用故事板进行了管理(我已经通过故事板添加了部分:行:单元格等),我以编程方式所做的唯一更改是将 a 添加UIButton为节标题通过实现:

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
    if (section == 2) {
        UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 64)];

        UIButton *button1 = [UIButton buttonWithType:UIButtonTypeRoundedRect];

        [button1 setTitle:@"Hydro Volume" forState:UIControlStateNormal];

        button1.frame = CGRectMake(62.5, 5, 205, 44);

        [view addSubview:button1];

        [button1 addTarget: self
                    action: @selector(buttonClicked:)
          forControlEvents: UIControlEventTouchDown];

        return view;
    }

    return nil;
}

我目前的困境是我必须添加一个包含下标的节标题,即:H2O 带下标的化学公式的图像

我无法直接在情节提要检查器中添加下标,有人可以告诉我这样做的方法是什么吗?

我查看了这个问题,但这并不是我想要的,因为我需要能够将它添加到我的部分标题中。

4

2 回答 2

4

一种简单的解决方案是使用 Unicode 下标范围,U+2080 到 U+2089。示例:2 H2 + O2 -> 2 H2O。

您可以通过使用 Unicode Hex Input 键盘布局、按住 Option 并键入十六进制数字来键入这些字符之一(例如,按住 option 并为“₀”键入“2080”)。

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

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

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

于 2013-07-30T20:58:10.157 回答
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 初始化程序采用 HTML。我没有使用过,所以不能说它是否可以工作,但如果它在 iOS 中工作并且理解下标,那么如果你从数据存储中加载这些下标标签而不是硬编码它们,那可能会更简单。

于 2013-07-30T21:21:24.203 回答