2013-07-30 119 views
1

在我的应用程序中,我有一个表格视图,迄今为止我已经使用故事板(我添加了部分:行:单元格等等,所有通过故事板),我编程的唯一更改是将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 image of a checmical formula with subscripts

我无法干脆直接添加标中故事板检查员,有人能告诉我怎么做到这一点?

我回顾了this question,但它不是我正在寻找的,因为我需要能够将它添加到我的部分标题中。

+1

UILabel有一个'属性文字'属性,它接受'NSAttributedString'。那么,你的section标题视图是一个UILabel(或者一个包含UILabel的视图)和属性文本? –

+0

@esker你会介意给我一些这样的示例代码吗? – vzm

回答

4

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

可以使用Unicode的十六进制输入键盘布局,保持选项,并输入十六进制数字(例如保持选项,并输入“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

+0

你可以请张贴一些示例代码,我可以使我的方案与部分标题文本中的工作? @robmayoff – vzm

+0

我认为这是比我发布的更好的解决方案。 –

+0

这怎么可以用字母来完成呢?而不是数字? – vzm

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中工作并理解下标,那么如果您从数据存储加载这些下标标签而不是对其进行硬编码,则这可能会更简单。

+0

很确定,HTML的东西是仅限Mac的。 –

+0

我很害怕这个。很高兴知道。 –

+0

@esker我尝试这样做,但我得到下面的生成警告:'不兼容的指针类型发送“常量CFStringRef”(又名“常量结构__CFString *常量”)以类型的参数“的NSString *”'并没有任何反应,以我的头节。我已经添加了适当的框架并导入了正确的头文件,有什么建议吗? – vzm