import UIKit
//MARK: - Model struct MobileModel { var brand: String? var isExpanded = false var model: [String]? }
class ViewController: UIViewController {
@IBOutlet weak var productInfoTableView: UITableView!
private var mobileDataArray = [MobileModel]()
private var isSelected = false
//MARK: - Life Cycle
override func viewDidLoad() {
super.viewDidLoad()
//MARK: - Data
mobileDataArray = [MobileModel(brand: "Nokia", model: ["Nokia 1","Nokia 6.1","Nokia 10","Nokia 8.5"]),
MobileModel(brand: "Mi", model: ["Redmi Note 4","Redmi Note 5","Redmi Note 5 Pro","Redmi Note 6","Redmi 5","Redmi Note 10"]),
MobileModel(brand: "Samsung", model: ["Samsung Galaxy S8","Samsung M20","Samsung A50","Samsung Champ"]),
MobileModel(brand: "Apple", model: ["iPhone 6s","iPhone 8","iPhone 10","iPhone 10 Pro","iPhone 7"])]
}
}
//MARK: - Table View Delegates extension ViewController: UITableViewDataSource, UITableViewDelegate {
//MARK: - No of Sections
func numberOfSections(in tableView: UITableView) -> Int {
return mobileDataArray.count
}
//MARK: - No of cells
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if self.mobileDataArray[section].isExpanded {
return mobileDataArray[section].model?.count ?? 0
} else {
return 0
}
}
//MARK: - Cell Items
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
cell.textLabel?.text = mobileDataArray[indexPath.section].model?[indexPath.row]
return cell
}
//MARK: - Section Header
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let view = UIView(frame: CGRect(x: 0, y: 0, width: tableView.frame.width, height: 40))
view.backgroundColor = .cyan
let btn = UIButton(type: .system)
btn.setTitle(mobileDataArray[section].brand, for: .normal)
btn.titleColor(for: .normal)
btn.tag = section
btn.frame = view.bounds
btn.addTarget(self, action: #selector(selectHeader(sender:)), for: .touchUpInside)
//let lbl = UILabel(frame: CGRect(x: 15, y: 0, width: view.frame.width - 15, height: 40))
//lbl.text = mobileData[section].brand
view.addSubview(btn)
return view
}
@objc func selectHeader(sender: UIButton) {
if isSelected {
self.mobileDataArray[sender.tag].isExpanded = !self.mobileDataArray[sender.tag].isExpanded
self.productInfoTableView.reloadSections([sender.tag], with: .fade)
} else {
self.mobileDataArray[sender.tag].isExpanded = true
}
}
}