当section包含空行时,删除UITableHeader标题

时间:2017-08-14 14:25:43

标签: swift uitableview

我正在实现一个UITableView来填充人员的联系人姓名。我已经实现了几乎所有的东西。

我需要删除用户已删除行的部分的标题标题,并且不包含任何其他行。有没有办法做到这一点。当index.item给我一个崩溃时,只需删除title数组中的值。对它有任何想法..

  func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {

        return sortedUniqueFirstLetters[section]
    }

    func numberOfSections(in tableView: UITableView) -> Int {

        return sections.count
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return sections[section].count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: cellId, for: indexPath) as! TableViewCell
        cell.account = sections[indexPath.section][indexPath.row]
        return cell
    }

    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return 80
    }

    func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int){
        view.tintColor = UIColor.setColor(Red: 223, Green: 220, Blue: 224, Alpha: 1)
        let header = view as! UITableViewHeaderFooterView
        header.textLabel?.textColor = UIColor.white
    }

    func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
        return true;
    }

    func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
        if editingStyle == .delete{
            ***if indexPath.item == 0{ //Trying to update title array when a section is empty
                sortedUniqueFirstLetters.remove(at: indexPath.section) //Index out of range error here.
            }***
            sections[indexPath.section].remove(at: indexPath.item)
            tableView.deleteRows(at: [indexPath], with: UITableViewRowAnimation.middle);
        }
    }

2 个答案:

答案 0 :(得分:2)

这是答案:

func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
    if self.tableView(tableView, numberOfRowsInSection: section) > 0 {
        return sortedUniqueFirstLetters[section]
    } else {
        return nil
    }
}

答案 1 :(得分:0)

您还应该使用heightForHeaderInSction以及titleForHEaderInSction方法。如果以下代码适合您,请告诉我:

func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
    let numberOfRows = tableView.numberOfRows(inSection: section)
    if numberOfRows == 0 {
        return ""
    }else{
        return sortedUniqueFirstLetters[section]
    }

}

func tableView (tableView:UITableView , heightForHeaderInSection section:Int) -> Float {
    let title = self.tableView(tableView, titleForHeaderInSection: section)
    if (title == "") {
        return 0.0
    }
    return 80.0
}