如何仅重新加载tableView节标题?

时间:2019-04-28 21:33:37

标签: ios swift uitableview

因此,当我在分段控件上从一个分段切换到另一个分段时,我试图获取UITableView节标题以更改背景和文本颜色。为此,我需要重新加载tableView数据,但我只想重新加载节标题。使用时

tableView.reloadData()

它可以工作,但它也会重置tableView中我不想尝试的其余数据。

override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
        let stringForThemeHeader = "Theme Settings"
        let stringForToggleHeader = "Password Settings"
        if section == 0 {
            return stringForThemeHeader
        } else {
            return stringForToggleHeader
        }
    }

那是设置标题的代码。

override func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
        let header = view as! UITableViewHeaderFooterView
        if darkModeSegmentedControlSwitcher.selectedSegmentIndex == 1 || darkModeSegmentedControlSwitcher.selectedSegmentIndex == 2 {
            view.tintColor = UIColor.red
            header.textLabel?.textColor = UIColor.white
        } else {
            view.tintColor = UIColor.init(red: 247.0/255.0, green: 247.0/255.0, blue: 247.0/255.0, alpha: 1.0)
            header.textLabel?.textColor = UIColor.black
        }

    }

这就是更改文本和背景的代码。选择一个段之后,除非使用以下方式重新加载整个tableView的数据,否则它不会更改:

tableView.reloadData()

所以我只需要知道如何仅重新加载节标题即可解决我的问题。

1 个答案:

答案 0 :(得分:0)

您可以手动迭代节标题。

for section in 0..<tableView.numberOfSections {
    guard let header = tableView.headerView(forSection: section) else {
        continue
    }
    // do something with the header
}

如果有很多部分,则只能迭代可见的标题。只需使用tableView.visibleCells来收集可见部分的索引。

相关问题