Быстрое табличное представление IOS получает заголовок для раздела

Ниже приведен мой код для добавления заголовка в раздел.

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()
}

Но приведенный выше код дает сбой, говоря: Поток 1: Неустранимая ошибка: неожиданно найдено nil при развертывании необязательного значения

Также я получаю предупреждение Cast from 'UITableViewHeaderFooterView?' для несвязанного типа «MenuOptionHeaderView» всегда терпит неудачу в моем коде

Я создаю MenuOptionHeaderView, используя файл .xib, и все работает нормально Я хочу знать, как получить заголовок для определенного раздела

Ниже приведен код 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 ?? "")


}


}

person amodkanthe    schedule 06.01.2020    source источник
comment
для какой строки вы получаете эту ошибку или сбой?   -  person Ketan Parmar    schedule 06.01.2020
comment
пусть headerView : MenuOptionHeaderView = optionsTableView.headerView(forSection: section) as! MenuOptionHeaderView   -  person amodkanthe    schedule 06.01.2020
comment
Надеюсь, это поможет -› stackoverflow.com/questions/15231726/   -  person dahiya_boy    schedule 06.01.2020
comment
Вы не определили optionsTableView в коде, которым поделились. Так что, если это nil, вы получите сбой.   -  person koen    schedule 06.01.2020
comment
Это может помочь вам: stackoverflow. ком/вопросы/20882561/   -  person Etienne Jézéquel    schedule 06.01.2020


Ответы (2)


ваше представление MenuOptionHeaderView должно наследоваться от UITableViewHeaderFooterView иначе этот вызов:

optionsTableView.headerView(forSection: section) as! MenuOptionHeaderView

не будет работать и всегда возвращает ноль.

Источник: Как получить заголовок раздела из UItableView

person Etienne Jézéquel    schedule 06.01.2020

  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 Повторное использование заголовка

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