title: Expand and Collapse tableview cells
body: <p>I'm able to expand and collapse cells but i wanna call functions (expand and collapse) inside UITableViewCell to change button title.</p>
  
  <p><a href="https://i.stack.imgur.com/U3alQ.png" rel="noreferrer"><img src="https://i.stack.imgur.com/U3alQ.png" alt="Iphone 5"></a></p>
  
  <pre>
  import UIKit
  
  class MyTicketsTableViewController: UITableViewController {
  
      var selectedIndexPath: NSIndexPath?
      var extraHeight: CGFloat = 100
  
      override func viewDidLoad() {
          super.viewDidLoad()
      }
  
      override func didReceiveMemoryWarning() {
          super.didReceiveMemoryWarning()
          // Dispose of any resources that can be recreated.
      }
  
      override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
          return 5
      }
  
      override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
          let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! MyTicketsTableViewCell
          return cell
      }
  
      override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
          if(selectedIndexPath != nil && indexPath.compare(selectedIndexPath!) == NSComparisonResult.OrderedSame) {
              return 230 + extraHeight
          }
  
          return 230.0
      }
  
      override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
          if(selectedIndexPath == indexPath) {
              selectedIndexPath = nil
          } else {
              selectedIndexPath = indexPath
          }
  
          tableView.beginUpdates()
          tableView.endUpdates()
      }
  }
  
  </pre>
  
  <pre>
  import UIKit
  
  class MyTicketsTableViewCell: UITableViewCell {
  
      @IBOutlet weak var expandButton: ExpandButton!
      @IBOutlet weak var detailsHeightConstraint: NSLayoutConstraint!
  
      var defaultHeight: CGFloat!
  
      override func awakeFromNib() {
          super.awakeFromNib()
  
          defaultHeight = detailsHeightConstraint.constant
  
          expandButton.button.setTitle("TAP FOR DETAILS", forState: .Normal)
          detailsHeightConstraint.constant = 30
      }
  
      func expand() {
          UIView.animateWithDuration(0.3, delay: 0.0, options: .CurveLinear, animations: {
              self.expandButton.arrowImage.transform = CGAffineTransformMakeRotation(CGFloat(M_PI * 0.99))
              self.detailsHeightConstraint.constant = self.defaultHeight
              self.layoutIfNeeded()
  
              }, completion: { finished in
                  self.expandButton.button.setTitle("CLOSE", forState: .Normal)
          })
      }
  
      func collapse() {
          UIView.animateWithDuration(0.3, delay: 0.0, options: .CurveLinear, animations: {
              self.expandButton.arrowImage.transform = CGAffineTransformMakeRotation(CGFloat(M_PI * 0.0))
              self.detailsHeightConstraint.constant = CGFloat(30.0)
              self.layoutIfNeeded()
  
              }, completion: { finished in
                  self.expandButton.button.setTitle("TAP FOR DETAILS", forState: .Normal)
          })
      }
  
  }
  
  </pre>