UITableViewHeaderFooterView в интерфейсеBuilder

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

Однако в IB я не могу найти компонент UITableViewHeaderFooterView (аналогичный UITableViewCell) и назначить для него повторное использование

Итак, как создать в пользовательском разделе заголовка?

Я создаю класс MySection, который наследуется от UITableViewHeaderFooterView Создайте .xib, MySection.xib Регистрировать xib для повторного использования ячеек

проблема заключается в том, как использовать initWitReuseIdentifier....

Ответ 1

Это абсолютно возможно, и Apple предлагает пример здесь.

Загрузите образец кода и посмотрите на разделHeaderView.xib.

Способ сделать это - создать xib с одним UIView на нем. Затем установите тип класса в класс, который наследуется от UITableViewHeaderFooterView.

Как только у вас есть наконечник с классом, который наследуется от UITableViewHeaderFooterView, вызовите следующее, чтобы зарегистрировать класс для повторного использования в качестве верхнего или нижнего колонтитула:

static NSString * const SectionHeaderViewIdentifier = @"SectionHeaderViewIdentifier";

[self.tableView registerNib:[UINib nibWithNibName:@"SectionHeaderView" bundle:nil] forHeaderFooterViewReuseIdentifier:SectionHeaderViewIdentifier];

Чтобы использовать представление, используйте метод делегата таблицы tableView: viewForHeaderInSection: например:

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSinteger)section {

    SectionHeaderViewClass *sectionHeaderView = (SectionHeaderView *)[tableView dequeueReusableHeaderFooterViewWithIdentifier:SectionHeaderViewIdentifier];

    // Do stuff...

    return sectionHeaderView;
}

Ответ 2

Я написал guide (протестирован на iOS 9), который состоит из 4 шагов:

  • Подкласс UITableViewHeaderFooterView
  • Создайте Nib с видом подкласса и добавьте 1 вид контейнера, который содержит все другие представления в верхнем/нижнем колонтитуле
  • В viewDidLoad вызовите registerNib:forHeaderFooterViewReuseIdentifier: для представления таблицы
  • Внедрите viewForHeaderInSection и используйте dequeueReusableHeaderFooterViewWithIdentifier, чтобы вернуть верхний/нижний колонтитул

Ответ 3

Своего достаточно, чтобы создать представление и назначить его класс в IB (идентификатор повторного использования не нужно устанавливать в построителе интерфейса (как пользовательским UITableViewCell))

Ответ 4

Последующие обходные пути позволяют мне перетаскивать элементы IB для кодирования в качестве переменных. UITableViewHeaderFooterView не позволяет это из коробки.

  • создать (Новый файл /CocoaTouchClass ) UITableViewHeaderFooterView .h.m.xib обычно

  • временно переименовать суперкласс из UITableViewHeaderFooterView в UIView. Перетащите назначьте свои элементы пользовательского интерфейса в соответствии с требованиями, IB назначит значение ключа правильно, вернитесь обратно в UITableViewHeaderFooterView, когда закончите.

  • в вашем представлении таблицы используйте registerNib: для регистрации вместо registerClass:. обычно подготовьте остальную часть таблицы (т.е.: dequeue).

Ответ 5

Документация UITableViewHeaderFooterView содержит метод registerNib:forHeaderFooterViewReuseIdentifier:

Но в настоящее время (по состоянию на 4 сентября 13) библиотека объектов в Interface Builder не включает UITableViewHeaderFooterView. Это делает registerNib: forHeaderFooterViewReuseIdentifier: бесполезно, потому что нет возможности правильно настроить представление в nib. Возможно, лучше попробовать повторно использовать ячейку...

Ответ 6

  • создать новый вид в xib

  • Загрузить представление из nib и установить для просмотра как footerview в tableview

UIView * headerview = [[[NSBundle mainBundle] loadNibNamed: @ "ReguistrationHeaderView" владелец: self options: nil] firstObject];   [self.tableview setTableFooterView: headerview];