我试图折叠选定的部分,但标题消失了,我试图在ViewDidLoad中注册viewForHeaderInSection类,但没有成功,这些步骤如下:
在每个标题上创建一个按钮和一个目标动作
如果点按了,expandingExpand函数会将section中的行数设置为0,然后以正确的索引(发送者按钮标签)调用reloadsections。
不幸的是,一旦重新加载,就不会调用viewForHeaderInSection,并且标题消失。
有什么帮助吗?
override func viewDidLoad() {
super.viewDidLoad()
// reistering headerfooterview class
tableView.registerClass(UITableViewHeaderFooterView.self, forHeaderFooterViewReuseIdentifier: "header")
}
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
if hookMode {
// print (data.count)
return data.count
} else {
return 1
}
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if section == selectedSection {
return 0
} else {
return data[section].count
}
}
func expandCollapse(sender: UIButton) {
self.selectedSection = sender.tag
tableView.reloadSections(NSIndexSet( index: sender.tag ), withRowAnimation: .Bottom)
}
func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let header: CustomHeaderTableViewCell = tableView.dequeueReusableCellWithIdentifier("header") as! CustomHeaderTableViewCell
let button = UIButton(type: UIButtonType.System) as UIButton
button.frame = header.bounds
button.backgroundColor = UIColor.greenColor()
button.setTitle("Test Button", forState: UIControlState.Normal)
button.addTarget(self, action: #selector(MainWitness.expandCollapse), forControlEvents: UIControlEvents.TouchUpInside)
button.tag = section
header.addSubview(button)
if hookMode {
// print( hookedUsernames[section] )
header.sectionHeaderLabel.text = hookedUsernames[section]
} else {
header.sectionHeaderLabel.text = "TRENDS"
}
return header
}
最佳答案
我在我的项目中做到了这一点。我所做的是在表格视图中创建了一个原型单元,并在情节提要中添加了标签和一个按钮。
创建的Tableviewcell类
class mainTableHeaderViewCell: UITableViewCell {
@IBOutlet weak var _btnShowHide: UIButton!
@IBOutlet weak var _lblSectionHeaderName: UILabel!
}
在控制器中
func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let header = tableView.dequeueReusableCellWithIdentifier("mainTableHeaderViewCell")! as! mainTableHeaderViewCell
header._lblSectionHeaderName.text = objTempDeficiencyList[section][0].sectionName
// sectionNameList[section].DESCRIPTION
header._btnShowHide.addTarget(self, action: "hideSection:", forControlEvents: .TouchUpInside)
if hiddenSections.contains(section) {
header._btnShowHide.setImage(UIImage(named: "expand"), forState: UIControlState.Normal)
}
else {
header._btnShowHide.setImage(UIImage(named: "uparrow"), forState: UIControlState.Normal)
}
header._btnShowHide.tag = section
return header.contentView
}
func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return 40
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if hiddenSections.contains(section) {
return 0
}
return List[section].count // getRowCount(section)
}
希望对您有所帮助。