Я реализую UITableView
с разделами и складными заголовками. Ячейки раздела имеют метки и кнопки. Ярлыки свернуты, но кнопки остаются незанятыми (не скрытыми), когда я сворачиваю заголовок.
Мне нужна реализация, где кнопки появляются, когда ячейка развернута, и скрыты, когда ячейка свернута. Я использовал пользовательскую ячейку с кнопкой внутри стека. В на этом рисунке стрелка представляет представление заголовка раздела таблицы, а переключатели должны быть скрыты после свертывания.
Вот код:
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
if (sections[indexPath.section].expanded)
{
return 244
}
else
{
return 0
}
}
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let header = ExpandableDashboardView()
print("title\(sections[section].title)")
header.customInit(title: sections[section].title, section: section, delegate: self,isOpen:sections[section].expanded)
return header
}
func toggleSection(header: ExpandableDashboardView, section: Int) {
sections[section].expanded = !sections[section].expanded
settingsTable.beginUpdates()
if sections[section].expanded == true
{
header.changeInit(title: sections[section].title, section: section, delegate: self)
}
else
{
header.customInit(title: sections[section].title, section: section, delegate: self, isOpen: sections[section].expanded)
}
class ExpandableDashboardView: UITableViewHeaderFooterView{
var delegate : ExpandableDashboardDelegate!
var section:Int!
var image = UIImage()
override init(reuseIdentifier: String?) {
super.init(reuseIdentifier: reuseIdentifier)
self.addGestureRecognizer(UITapGestureRecognizer(target:self,action:#selector(selectDashboardHeader)))
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func customInit(title:String,section:Int,delegate:ExpandableDashboardDelegate,isOpen:Bool)
{
// if isOpen == true{
//// self.textLabel?.text = "\u{25B6} \(title)"
// self.textLabel?.text = "\u{25BC} \(title)"
// }
// else{
// self.textLabel?.text = "\u{25BC} \(title)"
// }
// self.textLabel?.textColor = UIColor.black
self.textLabel?.text = "\u{25B6} \(title)" //02C3
self.section = section
self.delegate = delegate
layoutSubviews()
}
func changeInit(title:String,section:Int,delegate:ExpandableDashboardDelegate)
{
self.textLabel?.textColor = UIColor.black
self.textLabel?.text = "\u{25BC} \(title)"
self.section = section
self.delegate = delegate
layoutSubviews()
}
func selectDashboardHeader(gestureRecognizer:UIGestureRecognizer)
{
let cell = gestureRecognizer.view as! ExpandableDashboardView
delegate.toggleSection(header: self , section: cell.section)
print("section\(cell.section)")
}
override func layoutSubviews() {
super.layoutSubviews()
self.textLabel?.textColor = UIColor.init(red: 17.0/255.0, green: 83.0/255.0, blue: 168.0/255.0, alpha: 1.0)
self.contentView.backgroundColor = UIColor.init(red: 255.0/255.0, green: 255.0/255.0, blue: 255.0/255.0, alpha: 1.0)
}