// Make subviews touchable even if it is outside its superview bounds. // ** Add more views here ** lazy var touchableViews: [UIView] = { return [self.voteUpButton, self.voteDownButton, self.authorDetailButton] }() // Boilerplate override func hitTest(point: CGPoint, withEvent event: UIEvent?) -> UIView? { for view in touchableViews { if let v = view.hitTest(view.convertPoint(point, fromView: self), withEvent: event) { return v } } return super.hitTest(point, withEvent: event) } // Boilerplate override func pointInside(point: CGPoint, withEvent event: UIEvent?) -> Bool { if super.pointInside(point, withEvent: event) { return true } for view in touchableViews { return !view.hidden && view.pointInside(view.convertPoint(point, fromView: self), withEvent: event) } return false }