【问题标题】:IOS swift tableview get headerview for a sectionIOS swift tableview获取部分的headerview
【发布时间】:2020-04-24 00:21:39
【问题描述】:

以下是我将标题添加到部分的代码

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
}

以下是访问节标题的代码

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

但是上面的代码崩溃了,说 Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value

我也收到警告 'UITableViewHeaderFooterView' 的演员表?在我的代码中,不相关的类型“MenuOptionHeaderView”总是失败

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

下面是代码 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 ?? "")


}


}

【问题讨论】:

标签: ios swift uitableview tableview nstableheaderview


【解决方案1】:

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

optionsTableView.headerView(forSection: section) as! MenuOptionHeaderView

不会工作,总是返回 nil。

来源:How to get section header from UItableView

【讨论】:

    【解决方案2】:
    1. 您应该从UITableViewHeaderFooterView 继承您的自定义标题视图。
    class MenuOptionHeaderView: UITableViewHeaderFooterView {
       ....
    
       static var nib:UINib {
          return UINib(nibName: identifier, bundle: ZohoSearchKit.frameworkBundle)
       }
    
       static var identifier: String {
            return String(describing: self)
       }
    }
    
    1. 使用 dequeueReusableHeaderFooterView ,这样就不会每次都创建您的标题视图。它将提高您的滚动性能。

      2.1 在 UITableview 中注册你的标题视图。

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

      2.2 重用headerview

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多