Настройка раздела заголовка для UITableViewController
мне нужно настроить раздел заголовка UITableViewController
где для каждого раздела возвращается другой текст заголовка (получение данных из источника данных). Это достигается с помощью следующего:
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
NSArray *temp = [listOfMBeans allKeys];
DLog(@"MBean details: %@", temp);
NSString *title = [temp objectAtIndex:section];
DLog(@"Header Title: %@", title);
return title;
};
это работает хорошо, и я вижу ожидаемый результат. Однако мне нужно изменить также размер шрифта текста, и после просмотра подобных вопросов я реализовал следующее:
- (UIView *) tableview:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
DLog(@"Custom Header Section Title being set");
UIView *headerView = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, tableView.bounds.size.width, 30)] autorelease];
UILabel *label = [[[UILabel alloc] initWithFrame:CGRectMake(0, 0, tableView.bounds.size.width, 30)] autorelease];
label.text = [tableView.dataSource tableView:tableView titleForHeaderInSection:section];
label.backgroundColor = [UIColor clearColor];
label.font = [UIFont boldSystemFontOfSize:14];
[headerView addSubview:label];
return headerView;
}
- (CGFloat) tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
return 44.0;
}
кажется, что код никогда не вызывается. Мой понимание было вот что!--3--> по умолчанию устанавливается как делегат, но, похоже, я ошибаюсь.
на UITableViewController
создается таким образом (как часть иерархических данных):
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
ProjectDetails *detailViewController = [[ProjectDetails alloc] initWithStyle:UITableViewStyleGrouped];
detailViewController.project = [listOfMetrics objectAtIndex:indexPath.row];
// Push the detail view controller.
[[self navigationController] pushViewController:detailViewController animated:YES];
[detailViewController release];
}
какие изменения я должен сделать, чтобы сделать эту работу? Спасибо.
4 ответов
вы можете установить явно делегат:
detailViewController.tableView.delegate = detailViewController;
или вы можете сделать это в исходную функцию контроллера.
EDIT: ваш init
метод должен соответствовать каноническому init. Кроме того, мне кажется, что вы не создали свой UITableView. Попробуйте использовать этот код:
- (id)initWithStyle:(UITableViewStyle)style {
if ((self = [super initWithStyle:style])) {
self.tableView = [[[UITableView alloc] initWithFrame:self.view.bounds] autorelease];
self.tableView.autoresizingMask = UIViewAutoresizingFlexibleWidth UIViewAutoresizingFlexibleHeight;
self.tableView.delegate = self;
}
return self;
}
конечно, вы также можете сделать все это в файл nib...
этот вопрос старше, но я хотел поделиться своим кодом. Я использую обычное представление ячейки таблицы для заголовков разделов. Я разработал его с помощью interface builder и реализовал следующий метод делегата.
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier: @"Header"];
cell.textLabel.text = @"test";
return cell;
}
вот как вы получаете вид раздела barebones с помощью методов UITableViewDelegate:
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
UIView *header = [[UIView alloc] initWithFrame:CGRectMake(0, 0, tableView.frame.size.width, 40.0)];
header.backgroundColor = [UIColor grayColor];
UILabel *textLabel = [[UILabel alloc] initWithFrame:header.frame];
textLabel.text = @"Your Section Title";
textLabel.backgroundColor = [UIColor grayColor];
textLabel.textColor = [UIColor whiteColor];
[header addSubview:textLabel];
return header;
}
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
return 40.0;
}
вы можете попробовать это: в вашем ProjectDetails.h объявить UIView *tableHeader
, а также метод доступа - (UIView *)tableHeader;
. Затем в файле реализации:
- (UIView *)tableHeader {
if (tableHeader)
return tableHeader;
tableHeader = [[UIView alloc] initWithFrame:CGRectMake(0, 0, tableView.bounds.size.width, 30)];
// addlabel
return tableHeader;
}
в viewDidLoad позвоните:self.tableView.tableHeaderView = [self tableHeader];
Я не думаю, что вам нужно будет использовать метод heightForHeaderInSection.