I had a similar issue with a button and label embedded in a container view, inside a table cell. Touch events were being intercepted by the button.
If you don't need the button to highlight on press, then what I did was to use a UIView with a tap gesture recognizer instead of the button.
let fakeButtonView = UIView()
fakeButtonView.translatesAutoresizingMaskIntoConstraints = false
fakeButtonView.backgroundColor = UIColor.whiteColor()
let gestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(buttonTapped))
fakeButtonView.addGestureRecognizer(gestureRecognizer)
let label = UILabel()
label.translatesAutoresizingMaskIntoConstraints = false
label.text = ...
label.numberOfLines = 1
label.textAlignment = .Center
label.lineBreakMode = .ByTruncatingTail
label.minimumScaleFactor = 0.5
label.font = UIFont.systemFontOfSize(17.0)
fakeButtonView.addSubview(label)
fakeButtonView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-5-[label]-5-|",
options: NSLayoutFormatOptions(rawValue: 0), metrics: nil, views: ["label": label]))
fakeButtonView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|[label]|",
options: NSLayoutFormatOptions(rawValue: 0), metrics: nil, views: ["label": label]))
container.addSubview(fakeButtonView)
// Constraints from button to container
//
// ...