title: Swift - Header in UITableView blocks button interaction
body: <p>In my UITableView I want to have an option to click a button which have a fixed posision (see attached picture). But anything that is in front or behind the UITableView's section headers is blocked from interaction, it does not register the button taps. I've tried to set a higher zPosition, which brings the buttons in front of the headers, but I still can't press the buttons. This is what it lookes like:</p>
  
  <p><a href="http://i.stack.imgur.com/bTI9o.png" rel="nofollow">Image that shows the buttons before and after <code>(nameOfButton).layer.zPosition = 99</code> is applied.</a></p>
  
  <p>Even though my buttons is in front of the headers, the button taps is not registered...</p>
  
  <p>I'm creating the buttons programatically, and my <code>viewDidLoad</code> lookes like this:</p>
  
  <pre><code>override func viewDidLoad() {
          super.viewDidLoad()
  
          // Allow iOS to resize the cells automatically according to our Auto Layout constraints
          tableView.rowHeight = UITableViewAutomaticDimension
  
          // We will take ownership of the header view we've so nicely setup in the storyboard and then remove it from the table view.
          headerView = tableView.tableHeaderView
          tableView.tableHeaderView = nil
          tableView.addSubview(headerView)
          let addPhotoTapGesture = UITapGestureRecognizer(target: self, action: #selector(ViewController.addPhoto(_:)))
          headerView.addGestureRecognizer(addPhotoTapGesture)
  
          // PhotoPicker
          createPhotoPickerButtons()
  
          let effectiveHeight = kTableHeaderHeight-kTableHeaderCutAway/2
          tableView.contentInset = UIEdgeInsets(top: effectiveHeight, left: 0, bottom: 0, right: 0)
          tableView.contentOffset = CGPoint(x: 0, y: -effectiveHeight)
  
          headerMaskLayer = CAShapeLayer()
          headerMaskLayer.fillColor = UIColor.blackColor().CGColor
  
          headerView.layer.mask = headerMaskLayer
          updateHeaderView()
      } 
  </code></pre>
  
  <p>And my <code>createPhotoPickerButtons()</code> (Here I'm placing the buttons below the view so I can animate their appearance with <code>showImagePicker()</code>:</p>
  
  <pre><code>func createPhotoPickerButtons() {
  
          takePhotoButton = UIButton.init(type: UIButtonType.System) // .System
          photoLibraryButton = UIButton.init(type: UIButtonType.System) // .System
          cancelButton = UIButton.init(type: UIButtonType.System) // .System
  
          takePhotoButton.frame = CGRectMake(20, (0 + self.tableView.contentOffset.y + UIScreen.mainScreen().bounds.height), (UIScreen.mainScreen().bounds.width - 40), 40)
          photoLibraryButton.frame = CGRectMake(20, (0 + self.tableView.contentOffset.y + UIScreen.mainScreen().bounds.height), (UIScreen.mainScreen().bounds.width - 40), 40)
          cancelButton.frame = CGRectMake(20, (0 + self.tableView.contentOffset.y + UIScreen.mainScreen().bounds.height), (UIScreen.mainScreen().bounds.width - 40), 40)
  
          takePhotoButton.backgroundColor = UIColor(red: 0/255, green: 122/255, blue: 255/255, alpha: 1.0)
          photoLibraryButton.backgroundColor = UIColor(red: 0/255, green: 122/255, blue: 255/255, alpha: 1.0)
          cancelButton.backgroundColor = UIColor(red: 0/255, green: 122/255, blue: 255/255, alpha: 1.0)
  
          takePhotoButton.setTitle("Take Photo", forState: UIControlState.Normal)
          photoLibraryButton.setTitle("Photo Library", forState: UIControlState.Normal)
          cancelButton.setTitle("Cancel", forState: UIControlState.Normal)
  
          takePhotoButton.titleLabel?.font = UIFont.systemFontOfSize(17)
          photoLibraryButton.titleLabel?.font = UIFont.systemFontOfSize(17)
          cancelButton.titleLabel?.font = UIFont.systemFontOfSize(17)
  
          takePhotoButton.setTitleColor(UIColor.whiteColor(), forState: UIControlState.Normal)
          photoLibraryButton.setTitleColor(UIColor.whiteColor(), forState: UIControlState.Normal)
          cancelButton.setTitleColor(UIColor.whiteColor(), forState: UIControlState.Normal)
  
          let takePhotoButtonTapGesture = UITapGestureRecognizer(target: self, action: #selector(ViewController.takePhotoButtonAction(_:)))
          takePhotoButton.addGestureRecognizer(takePhotoButtonTapGesture)
          let photoLibraryButtonTapGesture = UITapGestureRecognizer(target: self, action: #selector(ViewController.photoLibraryButtonAction(_:)))
          photoLibraryButton.addGestureRecognizer(photoLibraryButtonTapGesture)
          let cancelButtonTapGesture = UITapGestureRecognizer(target: self, action: #selector(ViewController.cancelButtonAction(_:)))
          cancelButton.addGestureRecognizer(cancelButtonTapGesture)
  
          self.tableView.addSubview(takePhotoButton)
          self.tableView.addSubview(photoLibraryButton)
          self.tableView.addSubview(cancelButton)
  
          takePhotoButton.layer.zPosition = 99
          photoLibraryButton.layer.zPosition = 99
          cancelButton.layer.zPosition = 99
  
          takePhotoButton.alpha = 0
          photoLibraryButton.alpha = 0
          cancelButton.alpha = 0
  
      }
  </code></pre>
  
  <p>And at last my <code>showImagePicker()</code>which is called in <code>addPhoto()</code> (the action that is called when the user taps the image):</p>
  
  <pre><code>func showImagePicker(){
  
          // (0 + self.tableView.contentOffset.y + UIScreen.mainScreen().bounds.height - 50 - 10 - 50 - 10 - 50 - 10)
  
          UIView.animateWithDuration(0.5) {
              self.takePhotoButton.alpha = 1
              self.photoLibraryButton.alpha = 1
              self.cancelButton.alpha = 1
  
              self.takePhotoButton.frame.origin.y = 0 + self.tableView.contentOffset.y + UIScreen.mainScreen().bounds.height - 50 - 10 - 50 - 10 - 50 - 10
              self.photoLibraryButton.frame.origin.y = 0 + self.tableView.contentOffset.y + UIScreen.mainScreen().bounds.height - 50 - 10 - 50 - 10
              self.cancelButton.frame.origin.y = 0 + self.tableView.contentOffset.y + UIScreen.mainScreen().bounds.height - 50 - 10
          }
      }
  </code></pre>
  
  <p>I can't find anything about this on SO, and don't know of another solution for the buttons in the tableView.</p>