IOS swift qtableview 获取节的标题视图

IOS swift tableview get headerview for a section

以下是我将 header 添加到部分

的代码
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    let optionsForSection = isMutliLevelOptions() ? options : optionsList?[section]
    let sectionView = MenuOptionHeaderView()
    sectionView.isMultiSelectAllowed = allowsMultipleSelection(section)
    sectionView.selectedOptionsCount = getSelectedCount(section)
    sectionView.option = optionsForSection
    sectionView.setUI()
    //headerView = sectionView
    return sectionView
}

以下是访问 header 部分

的代码
  func updateHeader(section : Int) {
    let headerView : MenuOptionHeaderView = optionsTableView.headerView(forSection: section) as! MenuOptionHeaderView
    headerView.selectedOptionsCount = getSelectedCount(section)
    headerView.setUI()
}

但上面的代码崩溃说 线程 1:致命错误:在展开可选值时意外发现 nil

我也收到警告 从 'UITableViewHeaderFooterView?' 转换到不相关的类型 'MenuOptionHeaderView' 总是失败 在我的代码

我正在使用 .xib 文件创建 MenuOptionHeaderView,并且工作正常 我想知道如何获得特定部分的 header

以下是代码 MenuOptionHeaderView

import UIKit

class MenuOptionHeaderView: UIView {

@IBOutlet weak var optionNameLbl: UILabel!


@IBOutlet weak var selectMinLbl: UILabel!



@IBOutlet var contentView: UIView!


var option : Options?
var selectedOptionsCount = 0
var isMultiSelectAllowed = false
override init(frame: CGRect) {
   super.init(frame: frame)
   commonInit()
}

required init?(coder aDecoder: NSCoder) {
   super.init(coder: aDecoder)
   commonInit()
}

func commonInit() {
   Bundle.main.loadNibNamed("MenuOptionHeaderView", owner: self, options: nil)
   contentView.fixInView(self)
}


func setUI() {


    optionNameLbl.text = isMultiSelectAllowed ?  "\(option?.name ?? "")(\(selectedOptionsCount))" :  (option?.name ?? "")


}


}

您的视图 MenuOptionHeaderView 必须继承自 UITableViewHeaderFooterView 否则此调用:

optionsTableView.headerView(forSection: section) as! MenuOptionHeaderView

将不起作用,并且始终 returns 零。

来源:How to get section header from UItableView

  1. 您应该继承 UITableViewHeaderFooterView 的自定义 header 视图。
class MenuOptionHeaderView: UITableViewHeaderFooterView {
   ....

   static var nib:UINib {
      return UINib(nibName: identifier, bundle: ZohoSearchKit.frameworkBundle)
   }

   static var identifier: String {
        return String(describing: self)
   }
}
  1. 使用 dequeueReusableHeaderFooterView ,因此,您的 header 视图不会每次都被创建。它将提高您的滚动性能。

    2.1 在 UITableview 中注册您的 header 视图。

     optionsTableView.register(MenuOptionHeaderView.nib,forHeaderFooterViewReuseIdentifier: MenuOptionHeaderView.identifier)
    

    2.2 重复使用header查看

    if let headerView = tableView.dequeueReusableHeaderFooterView(withIdentifier: MenuOptionHeaderView.identifier) as? MenuOptionHeaderView {
     ....
    }