Mi solución en Swift:
class MyTableViewController: UITableViewController {
var sectionHeaderView:UIView?
...
override func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
sectionHeaderView = UIView(frame: CGRectMake(0, 0, self.tableView.frame.size.width, 30))
sectionHeaderView?.backgroundColor = UIColor.grayColor()
var button = UIButton(frame: CGRectMake(0, 0, self.tableView.frame.size.width, 30))
button.backgroundColor = UIColor.darkGrayColor()
button.setTitle("collapse/expand", forState: .Normal)
button.addTarget(self, action: "collapseOrExpandSectionHeader", forControlEvents: .TouchUpInside)
sectionHeaderView?.addSubview(button)
return sectionHeaderView
}
...
override func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
if let sectionHeader = sectionHeaderView {
return view.frame.size.height
} else {
return 30.0
}
}
...
func collapseOrExpandSectionHeader() {
if let sectionHeader = sectionHeaderView {
let headerHeight:CGFloat
if sectionHeader.frame.size.height == 200 {
headerHeight = 30.0
} else {
headerHeight = 200.0
}
UIView.animateWithDuration(0.3, animations: {
self.tableView?.beginUpdates()
sectionHeader.frame.size.height = headerHeight
self.tableView?.endUpdates()
})
}
}
gracias @ prendio2 que funcionaron bien. sin embargo, no fue capaz de eliminar la vista (que es lo que estaba tratando de hacer). pero tan pronto como me desplacé se eliminó, así que está bien :) – jasongregori
para cualquier persona que tenga el mismo caso de uso que yo (quieren eliminar la vista), puede mantener una referencia y usar el método 'removeFromSuperview' en durante la animación para ocultarlo correctamente. – jasongregori
Esto funciona bien, pero el área que aparece abarca mi primer UITableViewCell. ¿Algunas ideas? ¿Hay alguna manera de cambiar la tabla de abajo cuando esto sucede? – arooo