我使用以下代码作为自定义标题,单元格中的对象为nil。我试图重新连接插座并使用uiview而不是tableviewcell,但没有任何改变。单元格位于uiviewcontroller中的tableview内。
class CaptionHeaderCell: UITableViewHeaderFooterView {
@IBOutlet weak var typeField: UILabel!
@IBOutlet weak var nameField: UILabel!
@IBOutlet weak var statusField: UILabel!
@IBOutlet weak var timeField: UILabel!
override func awakeFromNib() {
super.awakeFromNib()
}
}
override func viewDidLoad() {
super.viewDidLoad()
//self.tableView.register(UINib(nibName: "CaptionHeaderCell", bundle: nil), forHeaderFooterViewReuseIdentifier: "CaptionHeaderCell")
self.tableView.register(CaptionHeaderCell.self, forHeaderFooterViewReuseIdentifier: "CaptionHeaderCell")
}
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let header = tableView.dequeueReusableHeaderFooterView(withIdentifier: "CaptionHeaderCell") as! CaptionHeaderCell
//Crashes when trying to set text
header.timeField.text = self.getCallTime(startTime: call!.startTime, endTime: call!.endTime)
return header
}
答案 0 :(得分:1)
在我的项目中,我没有添加这行代码:
self.tableView.register(CaptionHeaderCell.self, forHeaderFooterViewReuseIdentifier: "CaptionHeaderCell")
我直接创建了单元格:
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?
这也不是HeaderFooterview
。
我添加了下面的代码行,它起作用了:
var headerView: CaptionHeaderCell? = tableView.dequeueReusableCell(withIdentifier: "CaptionHeaderCell") as? CaptionHeaderCell
尝试在您的方案中有效。
答案 1 :(得分:0)
当我使用此代码时:
func register<T: UITableViewHeaderFooterView>(_ classType: T.Type) {
let desc = String(describing: classType)
register(classType, forHeaderFooterViewReuseIdentifier: desc)
}
我也有参考,但如果改为:
func register<T: UITableViewHeaderFooterView>(_ classType: T.Type) {
let desc = String(describing: classType)
let nib = UINib(nibName: desc, bundle: nil)
register(nib, forHeaderFooterViewReuseIdentifier: desc)
}
一切都很好:)。
答案 2 :(得分:0)
对我来说没有任何效果,解决方案是使用 UITableViewCell 而不是 UITableViewHeaderFooterView 我的代码或多或少像这样..
-组件-
class TitleHeaderDetails: UITableViewCell{
// MARK: - Outlets
@IBOutlet weak var title: UILabel!
@IBOutlet weak var imgLine: UIImageView!
// MARK: - Lifeecycle
override func awakeFromNib() {
super.awakeFromNib()
}
}
-在 viewDidLoad-
registerCell(tableView: tableView, cellType: TitleHeaderDetails.self)
-在 RegisterCell 中- 加入你的班级
static func registerCellNib<T: UITableViewCell>(_ tableView: UITableView, cellType: T.Type)
public func registerCell(tableView: UITableView, cellType: Any){
YourClass.registerCellNib(tableView, cellType: cellType as! UITableViewCell.Type)
}
-在委托中-
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return 40
}
-viewForHeaderInSection-
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let viewForHeader = UIView(frame: CGRect(x: 0, y: 0, width: tableView.frame.width, height: 40))
let titleHeader = tableView.dequeueReusableCell(withIdentifier: "TitleHeaderDetails") as! TitleHeaderDetails
titleHeader.frame = viewForHeader.bounds
viewForHeader.addSubview(titleHeader)
return titleHeader
}