2013-04-27 3 views
2

В моем приложении (iPad) возникла необходимость в создании UITableView, содержащего несколько столбцов. Для этого мне пришлось создать пользовательский UITableViewCell для предоставления необходимых столбцов.UITableView: viewForHeaderInSection - текст заголовка?

Теперь пришло время размещать заголовки на этих столбцах. В делегате viewForHeaderInSection я хочу поместить метку, которая расширяет ширину таблицы.

Все прошло хорошо, был задан цвет фона, который отлично подходит к ширине обзора.

Но когда я иду использовать:

label.text = [NSString stringWithFormat:@" Date  Dist  Litres  Cost($)"]; 

Я не получаю текст разводя представить в приведенном выше примере. То, что я получаю больше похоже:

" Date Dist Litres Cost($)" 

Как восстановить пробелы, которые мне нужны в тексте заголовка?

+0

Почему вы не создаете 4 UILabels и поместить их в заголовок, чтобы вы могли более точно контролировать место этикеток? – Lefteris

+0

Ваш вопрос несколько расплывчатый, поэтому я получаю несколько смутное чувство, что вы должны использовать UICollectionView. – QED

ответ

5

Вы должны создать представление заголовка с четырьмя суб-окнами UILabel.

Что-то вроде этого:

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { 
    UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 30)]; 
    // 4 * 69 (width of label) + 3 * 8 (distance between labels) = 300 
    UILabel *label1 = [[UILabel alloc] initWithFrame:CGRectMake(10, 4, 69, 22)]; 
    label1.text = @"Date"; 
    [headerView addSubview:label1]; 
    UILabel *label2 = [[UILabel alloc] initWithFrame:CGRectMake(87, 4, 69, 22)]; 
    label2.text = @"Dist"; 
    [headerView addSubview:label2]; 
    UILabel *label3 = [[UILabel alloc] initWithFrame:CGRectMake(164, 4, 69, 22)]; 
    label3.text = @"Litres"; 
    [headerView addSubview:label3]; 
    UILabel *label4 = [[UILabel alloc] initWithFrame:CGRectMake(241, 4, 69, 22)]; 
    label4.text = @"Cost($)"; 
    [headerView addSubview:label4]; 
    return headerView; 
} 

Настройка цвета, шрифты и рамки для ваших требований.

Это будет намного чище, чем полагаться на ширину символа пробела.
Ваш способ будет работать, если вы используете шрифт с фиксированной шириной, но я бы предложил против него.

Если вы хотите локализовать свое приложение на разных языках, задача подсчета пробелов станет кошмаром.

1

Это будет хорошо, если вы делаете это путем добавления меток в UIView (давайте назовем headerView) в этом положение соответствующего, и сделать выравнивание всех меток NSTextAlignmentCenter затем устанавливают название этикеток соответственно. Затем верните это значение headerView.

- (UIView *) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section 
2

Ну, я не знаю, что вы пытаетесь сделать, и в чем цель, и, конечно, это выглядит странно. Но просто чтобы получить пробелы внутри строки в объекте-c, вы можете просто добавить «\ t», и это добавит пространство, равное TAB.

label.text = [NSString stringWithFormat: @ "Date \ t Dist \ t Liters \ t Cost ($)"];

Это будет добавлено пробелы в строке, но лучший способ заключается в использовании различных заголовков для разных столбцов и установить их названия заголовков, как это было предложено другие ответы

+0

Спасибо всем ..... это действительно полезно. Очень признателен. – Fritzables

+0

Простите, Джессика, я попробовал ваш метод, но, к сожалению, это не сработало в моем сценарии. Мне это удалось, вставив метки для каждого столбца, как предложил Маттиас. – Fritzables

+0

@Fritzables рада слышать, что проблема решена – Jessica

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