2013-07-30 3 views
1

В моем приложении у меня есть табличный вид, которым я до сих пор справлялся с раскадными версиями (я добавил разделы: rows: cells и т. Д. Все через раскадровки), единственное изменение, которое я сделал программным путем, - это добавить 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 имеет свойство 'attributedText', которое принимает' NSAttributedString'. Итак, ваш заголовок заголовка раздела является UILabel (или представлением, содержащим UILabel) с атрибутомText? –

+0

@esker, не могли бы вы показать мне пример кода? – vzm

ответ

4

Одним из простых решений является использование диапазона индексов Unicode U + 2080 до U + 2089. Пример: 2 H2 + O2 -> 2H2O.

Вы можете ввести один из этих символов, используя раскладку клавиатуры ввода Unicode Hex Input, удерживая 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

+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; 
} 

Edit: вероятно, доступны только на OS X: Я также заметил, что есть NSAttributedString initializers that take HTML. Я не использовал это, поэтому не могу сказать, будет ли это работать, но если он работает в iOS и понимает индексы, это может быть проще, если вы загружаете эти индексированные метки из хранилища данных, а не жестко кодируете их.

+0

Довольно уверен, что материал HTML - только для Mac. –

+0

Я боялся этого. Хорошо знать. –

+0

@esker Я пробовал это, но я получил следующее предупреждение о сборке: 'Несовместимые типы указателей, отправляющих 'const CFStringRef' (aka 'const struct __CFString * const') в параметр типа 'NSString *'', и ничего не происходит с моим заголовком раздела , Я добавил соответствующую структуру и импортировал правильные файлы заголовков, любые предложения? – vzm

Смежные вопросы