我想使用界面构建器为表视图部分创建自定义标头。我不能使用 titleForHeaderInSection 方法,因为我需要显示两个标签。我使用了这个说明:Customizing Header and Footer of TableView in iOS8但它不起作用。
到目前为止我做了什么:
class CustomTableCell: UITableViewCell {
@IBOutlet weak var dateLabel: UILabel!
@IBOutlet weak var dateDescriptionLabel: UILabel!
}
viewForHeaderInSection
func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let headerCell = tableView.dequeueReusableCellWithIdentifier("CustomTableCell") as CustomTableCell
headerCell.backgroundColor = UIColor.cyanColor()
headerCell.dateLabel.text = "Test date"
headerCell.dateDescriptionLabel.text = "Test date description"
return headerCell
}
当我运行应用程序时,该部分出现一秒钟,然后在表格单元格下移动,我收到一个错误:表单元格没有重复使用的索引路径。
这个解决方案有什么问题?我从我已经链接的教程中下载了该项目,它在那里工作。
答案 0 :(得分:2)
你的问题源于UIKit如何处理UITableViews。 为了确保表视图快速响应,即使有大量单元格,也会重复使用单元格。
通过调用tableView.dequeueReusableCellWithIdentifier("CustomTableCell")
,您要求tableView为您提供一个可以重用的单元格。
很多人一直在使用可重用的单元格来设计Storyboard中的页眉/页脚。从iOS 7 Beta 5开始,这可能会导致错误。这个答案很好地解释了这种情况:What is the meaning of the “no index path for table cell being reused” message in iOS 6/7?
要设计自己的自定义页眉/页脚视图,我不建议使用UITableViewCells。相反,您应该直接在代码中创建和设计自定义UIView。如果要使用Interface Builder,可以创建.xib或在Storyboard中创建一个视图,该视图不是实际控制器视图的子视图。