Ответ Мэтта должен работать.
Создайте подкласс типа UITableViewHeaderFooterView
и назовите его CustomHeaderView
class CustomHeaderView: UITableViewHeaderFooterView {
// programmatically add the sectionTitle and whatever else inside here. Matt said there isn’t a storyboard or nib for a HeaderFooterView so do it programmatically
}
Затем внутри viewForHeaderInSection
используйте tableView.dequeueReusableHeaderFooterView
и приведите его как CustomHeaderView
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
// don't forget to rename the identifier
let customHeaderView = tableView.dequeueReusableHeaderFooterView(withIdentifier: "customHeaderView") as! CustomHeaderView
customHeaderView.sectionTitle.text = viewModel.items[section].sectionTitle
customHeaderView.section = section
customHeaderView.delegate = self
return customHeaderView
}
Если нет, попробуйте это.
Если вы не хотите, чтобы ячейка подсвечивалась, сначала установите стиль выделения на .none
:
Либо установить .selectionStyle = .none
внутри самой HeaderCell
или
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let headerCell = tableView.dequeueReusableCell(withIdentifier: "headerCell") as! HeaderViewCell
headerCell.sectionTitle.text = viewModel.items[section].sectionTitle
headerCell.section = section
headerCell.delegate = self
headerCell.selectionStyle = .none // set it here
return headerCell
}
Затем в didSelectRowAtIndexPath
выясните тип ячейки, которая выбирается. Если это HeaderCell
, тогда просто return
, и ячейка не должна выдвигаться. Если это какой-либо другой тип ячеек (например, PushCell), то эти ячейки должны выполнить переход:
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
// if it's a HeaderCell then do nothing but print
if let _ = tableView.cellForRowAtIndexPath(indexPath) as? HeaderCell {
tableView.deselectRow(at: indexPath, animated: true)
print("+++++HeaderCell was tapped")
return // nothing should happen
}
// if it's a PushCell then push
if let _ = tableView.cellForRowAtIndexPath(indexPath) as? PushCell {
print("-----PushCell was tapped")
performSegue(withIdentifier...
// or if your using navigationController?.pushViewController(...
}
}