2015-05-06 2 views
0

Использование UITableView и NSFetchedResultsController Я обновляю и показываю содержимое своей таблицы. В какой-то момент у меня есть экран без заголовка. Это должно быть вместо пространства между ячейками.Мой заголовок в UITableView не добавлен в иерархию UIView

enter image description here

Когда я отлаживать Просмотр иерархии У меня есть следующая информация. Выбранная ячейка в . Иерархия представления UI. является appriopriate для выбранной ячейки в . Иерархия отладочной развертки. enter image description here

enter image description here

Чтобы создать представление заголовка я использую следующий метод:

override func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { 
    let workday = workDayObjectForSection(section) 
    let cell = tableView.dequeueReusableCellWithIdentifier(PBOUserWorkDayCellIdentifier) as! PBOUserWorkDayTableViewCell 
    cell.configureCellWithWorkDay(workday) 

    return cell 
} 
+1

Почему вы помещаете 'ReusableCell' в заголовок? Это причина – Azat

+0

Действительно? Мне было предложено использовать ячейку таблицы представления в виде заголовка в другом вопросе о переполнении стека. –

+0

Вы можете использовать тот же вид, но вы не должны получать его из 'tableView' в качестве ячейки многократного использования, т. Е. Вы должны создавать его каждый раз с нуля. – Azat

ответ

0

Вы не должны получить view для tableView заголовка с использованием метода dequeueReusableCellWithIdentifier. От documentation:

Если объект ячейки повторно используется, вы назначаете ему идентификатор повторного использования (произвольную строку) в раскадровке. Во время выполнения табличное представление хранит объекты ячейки во внутренней очереди. Когда представление таблицы задает источник данных для настройки объекта ячейки для отображения, источник данных может получить доступ к очереди объекта, отправив dequeueReusableCellWithIdentifier: сообщение табличного, передавая идентификатор повторного

Это означает, что, когда ты return header как ячейка повторного использования, tableView может занять это отображение в другом месте как ячейке. Обратите внимание, что поведение заголовка отличается от ячейки, оно остается наверху, а секция видна.

Однако вы можете использовать тот же самый вид для заголовка, но создавать его с xib, storyboard и т. Д. Каждый раз и не назначать идентификатор повторного использования. И если вы ищете некоторую оптимизацию, вы можете сохранить их в каком-то массиве и вернуть кешированные значения. Но я бы рекомендовал не использовать подклассы UITableViewCell в виде заголовков таблиц