สวิฟท์ 5
ปุ่มบน superview ด้วย 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:)
ส่งคืนจริงลำดับชั้นของมุมมองย่อยจะถูกสำรวจในทำนองเดียวกันจนกว่าจะพบมุมมองด้านหน้าที่มีจุดที่ระบุ
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)
}