스위프트 5
tapgesture가있는 수퍼 뷰의 버튼
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
if let _ = touch.view as? UIButton { return false }
return true
}
필자의 경우 hitTest를 구현합니다. 이 저에게 이었습니다. 버튼으로 컬렉션보기를했습니다.
이 메소드 point(inside:with:)
는 각 서브 뷰 의 메소드를 호출하여 터치 이벤트를 수신해야하는 서브 뷰를 판별 하여 뷰 계층 구조를 순회합니다 . 경우 point(inside:with:)
true를 반환 지정된 포인트를 포함한 맨 앞보기가 발견 될 때까지, 다음 서브 뷰의 계층 구조는 유사 이송됩니다.
override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
guard isUserInteractionEnabled else { return nil }
guard !isHidden else { return nil }
guard alpha >= 0.01 else { return nil }
guard self.point(inside: point, with: event) else { return nil }
for eachImageCell in collectionView.visibleCells {
for eachImageButton in eachImageCell.subviews {
if let crossButton = eachImageButton as? UIButton {
if crossButton.point(inside: convert(point, to: crossButton), with: event) {
return crossButton
}
}
}
}
return super.hitTest(point, with: event)
}