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
UIView * headerview = [[[NSBundle mainBundle] loadNibNamed: @ "ReguistrationHeaderView" владелец: self options: nil] firstObject]; [self.tableview setTableFooterView: headerview];