我想通过点击它的标题来创建一个可扩展的tableview,我有一个在viewForHeaderInSection中调用的headerfooterview类来实现标题,并且在我尝试重新加载该部分之前看起来很好,当该部分折叠时子视图消失。
这里有一些代码
override func viewDidLoad() {
super.viewDidLoad()
tableView.registerClass(CustomHeaderTableViewCell.self, forHeaderFooterViewReuseIdentifier: "header")
}
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return data.count
}
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: .None)
}
func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let header: CustomHeaderTableViewCell = tableView.dequeueReusableHeaderFooterViewWithIdentifier("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)
header.textLabel!.text = "TRENDS"
return header
}
答案 0 :(得分:1)
标题的子视图(在这种情况下,您的按钮消失了)的原因是方法func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?
中的headerView的高度不正确
headerView的高度仍然等于零(宽度也等于零),因此,当您的代码执行button.frame = header.bounds
时,高度将被设置为零,宽度也将被设置为零。在屏幕上看到。
要解决此问题,您可以使用CGRect(x: 0, y: 0, width: tableView.bounds.width, height: 30)
之类的固定矩形来设置按钮的边框。
答案 1 :(得分:0)
不是从原型单元格填充标题,而是为标题视图创建单独的.XIB并从中填充标题视图。它会起作用。