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
- 您应该继承
UITableViewHeaderFooterView
的自定义 header 视图。
class MenuOptionHeaderView: UITableViewHeaderFooterView {
....
static var nib:UINib {
return UINib(nibName: identifier, bundle: ZohoSearchKit.frameworkBundle)
}
static var identifier: String {
return String(describing: self)
}
}
使用 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 {
....
}
以下是我将 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
- 您应该继承
UITableViewHeaderFooterView
的自定义 header 视图。
class MenuOptionHeaderView: UITableViewHeaderFooterView {
....
static var nib:UINib {
return UINib(nibName: identifier, bundle: ZohoSearchKit.frameworkBundle)
}
static var identifier: String {
return String(describing: self)
}
}
使用
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 { .... }