UITableVC没有显示节标题内容

时间:2017-03-23 16:22:25

标签: swift tableview sectionheader

仅将我的代码转换为swift,因此不使用故事板。重写代码后(没有故事板使用),不显示标题信息!

如果我从:

更改viewForHeaderInSection返回值
override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    let cell = tableView.dequeueReusableCell(withIdentifier: "headerId") as! ListsVCHeader
    cell.fillHeader(header: listTitles[section])

    return cell.contentView
}

为:

override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    let cell = tableView.dequeueReusableCell(withIdentifier: "headerId") as! ListsVCHeader
    cell.fillHeader(header: listTitles[section])

    return cell  // ==> removed .contectView
}

显示标题内容但是节标题向左移动执行我用来启动行删除的轻扫手势。有什么建议?找到下面的相关代码。

class ListsVC: UITableViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        tableView.register(ListsVCHeader.self, forCellReuseIdentifier: "headerId")
        // register other Cells
    }

    override func numberOfSections(in tableView: UITableView) -> Int {
        return listTitles.count
    }

    override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int)
    -> String? {
        return listTitles[section]
    }

    override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {

        let cell = tableView.dequeueReusableCell(withIdentifier: "headerId") as! ListsVCHeader
        cell.fillHeader(header: listTitles[section])
        return cell.contentView
    }

    override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
        return HeaderSectionHeight
    }

    override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {

        switch editingStyle {
        case .delete:
            // mycode
        default:
            break
        }
    }
}

Section Header单元格

class ListsVCHeader: UITableViewCell {

    override init(style: UITableViewCellStyle, reuseIdentifier: String?) {

    super.init(style: style, reuseIdentifier: reuseIdentifier)
        // add subviews and constraints
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    func fillHeader (header: String) {
        name.text = header
    }
}

1 个答案:

答案 0 :(得分:1)

register中的viewDidLoad更改为:

tableView.register(ListsVCHeader.self, forHeaderFooterViewReuseIdentifier: "headerId") 

您的班级ListsVCHeader应更改为:

class ListsVCHeader: UITableViewHeaderFooterView

并最后更改以下代码:

let cell = tableView.dequeueReusableCell(withIdentifier: "headerId") as! ListsVCHeader

let cell = tableView.dequeueReusableHeaderFooterView(withIdentifier: "headerId) as! ListsVCHeader