UITableView поддерживает отсылку событий по двум протоколам UITableViewDataSource и UITableViewDelegate. Первый отвечает за получение данных которые отображаются в компоненте, второй за их внешний вид. В протоколе UITableViewDataSource есть методы – tableView:titleForHeaderInSection: и – tableView:titleForFooterInSection: которые должны возвращать строки заголовка и подписи для каждой секции в таблице. Но в протоколе UITableViewDelegate можно реализовать методы – tableView:viewForHeaderInSection: и – tableView:heightForHeaderInSection: для установки вашего вью на заголовок секции (методы – tableView:viewForFooterInSection: и – tableView:heightForFooterInSection: для подписи секции)
Реализуем простой пример использования (скачать можно отсюда)
У нас есть UIViewController на котором находится UITableView. Создаем вью которое будем использовать как заголовок секции таблицы.
- CGRect rct;
- headerView = [[UIView alloc] initWithFrame:CGRectZero];
- UIImage *img = [UIImage imageNamed:@"apple.png"];
- UIImageView *tmpImgView = [[UIImageView alloc] initWithImage:img];
- rct = CGRectMake(screenRect.size.width*.05, 0.0, img.size.width, img.size.height);
- tmpImgView.frame = rct;
- [headerView addSubview:tmpImgView];
- rct.origin.x = 0.0;
- rct.size = CGSizeMake(screenRect.size.width, rct.size.height);
- headerView.frame = rct;
- [tmpImgView release];
тут headerView - имеет тип UIView, его то мы и будем отображать в таблице.
А теперь опишем функции отображение этого вью как заголовка первой секции таблицы:
- - (UIView *) tableView:(UITableView *) tableView viewForHeaderInSection:(NSInteger) section
- {
- if (section==0)
- {
- return headerView;
- }
- return nil;
- }
- - (CGFloat) tableView:(UITableView *) tableView heightForHeaderInSection:(NSInteger) section
- {
- if (section==0)
- {
- return headerView.frame.size.height;
- }
- return 0.0;
- }
В первой функции мы возвращаем вью которое должно отображаться в таблице, во второй - высоту этого вью.
Так-же в компоненте UITableView можно использовать свойства tableHeaderView и tableFooterView для задания вью как заголовка и подписи всей таблицы.