it-roy-ru.com

Добавление iOS UITableView HeaderView (не заголовок раздела)

Я хочу добавить заголовок таблицы (не заголовки разделов), как в приложении контактов, например: enter image description here

именно так - ярлык рядом с изображением над таблицей.

Я хочу, чтобы все представления были прокручиваемыми, поэтому я не могу разместить их вне стола.

Как я могу это сделать?

164
Assaf b

UITableView имеет свойство tableHeaderView. Установите это на любой вид, который вы хотите там.

Используйте новое UIView в качестве контейнера, добавьте текстовую метку и представление изображения к этому новому UIView, затем установите tableHeaderView в новое представление.

Например, в UITableViewController:

-(void)viewDidLoad
{
     // ...
     UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(XXX, YYY, XXX, YYY)];
     UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(XXX, YYY, XXX, YYY)];
     [headerView addSubview:imageView];
     UILabel *labelView = [[UILabel alloc] initWithFrame:CGRectMake(XXX, YYY, XXX, YYY)];
     [headerView addSubview:labelView];
     self.tableView.tableHeaderView = headerView;
     [imageView release];
     [labelView release];
     [headerView release];
     // ...
} 
241
peterjb

Вы можете сделать это довольно легко в Интерфейсном Разработчике. Просто создайте представление с таблицей и поместите другое представление на стол. Это станет представлением заголовка таблицы. Добавьте ваши ярлыки и изображения для этого представления. Смотрите рисунок ниже для иерархии представления. View Hierarchy in Interface Builder

191
Kirby Todd

В Свифт:

override func viewDidLoad() {
    super.viewDidLoad()

    // We set the table view header.
    let cellTableViewHeader = tableView.dequeueReusableCellWithIdentifier(TableViewController.tableViewHeaderCustomCellIdentifier) as! UITableViewCell
    cellTableViewHeader.frame = CGRectMake(0, 0, self.tableView.bounds.width, self.heightCache[TableViewController.tableViewHeaderCustomCellIdentifier]!)
    self.tableView.tableHeaderView = cellTableViewHeader

    // We set the table view footer, just know that it will also remove extra cells from tableview.
    let cellTableViewFooter = tableView.dequeueReusableCellWithIdentifier(TableViewController.tableViewFooterCustomCellIdentifier) as! UITableViewCell
    cellTableViewFooter.frame = CGRectMake(0, 0, self.tableView.bounds.width, self.heightCache[TableViewController.tableViewFooterCustomCellIdentifier]!)
    self.tableView.tableFooterView = cellTableViewFooter
}
12
King-Wizard

Вы также можете просто создать ТОЛЬКО UIView в Интерфейсном конструкторе и перетащить ImageView и UILabel (чтобы он выглядел как нужный заголовок), а затем использовать это.

Как только ваш UIView выглядит так, как вы этого хотите, вы можете программно инициализировать его из XIB и добавить в свой UITableView. Другими словами, вам не нужно разрабатывать ВСЮ таблицу в IB. Просто headerView (таким образом, представление заголовка может быть повторно использовано и в других таблицах)

Например, у меня есть пользовательский UIView для одного из моих заголовков таблицы. Представление управляется файлом xib с именем "CustomHeaderView" и загружается в заголовок таблицы с использованием следующего кода в моем подклассе UITableViewController:

-(UIView *) customHeaderView {
    if (!customHeaderView) {
        [[NSBundle mainBundle] loadNibNamed:@"CustomHeaderView" owner:self options:nil];
    }

    return customHeaderView;
}

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Set the CustomerHeaderView as the tables header view 
    self.tableView.tableHeaderView = self.customHeaderView;
}
11
iansari