2013-07-30 120 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