Ma solution à 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()
})
}
}
grâce @ prendio2 qui ont bien fonctionné. Il n'a pas été en mesure d'enlever la vue (mais c'est ce que j'essayais de faire). mais dès que j'ai défilé il a été enlevé, donc c'est ok :) – jasongregori
pour tous ceux qui ont le même cas d'utilisation que moi (ils veulent supprimer la vue), vous pouvez garder une référence et utiliser la méthode 'removeFromSuperview' sur pendant l'animation pour le cacher correctement. – jasongregori
Cela fonctionne bien, mais la zone qui apparaît couvre mon premier UITableViewCell. Des idées? Un moyen de déplacer la table vers le bas lorsque cela se produit? – arooo