我創建了一個包含兩個UIButton
s的小型UIView
。該視圖響應UITapGesture
事件。按鈕應該會響應TouchUpInside
,但是當我點擊按鈕時,響應者是底層視圖,輕擊手勢選擇器被觸發。尋找建議或建議。UIButton觸摸事件落入底層視圖
回答
每個UIView都有一個'exclusiveTouch'屬性。如果它被設置爲YES,則該視圖不會將響應傳遞給響應者鏈。嘗試在你的UIButtons上設置這個屬性,看看這是否有所作爲。
我會給這個鏡頭。 – Kyle 2011-03-04 15:37:02
這個設計的問題是,它類似於將一個按鈕嵌入到另一個按鈕。雖然您可能有合理的理由去做,但您應該更加註意事件流程。
在手勢識別器到達子視圖(您的案例中的兩個按鈕)之前,手勢識別器會攔截觸摸。您應該實現UIGestureRecognizerDelegate協議,即gestureRecognizer:shouldReceiveTouch:
方法,如果觸摸位於兩個按鈕中的任何一箇中,則返回NO。這將防止橙色視圖篡改旨在用於按鈕的觸摸,並且按鈕將按預期開始工作。
我想到了這一點,但即使動畫(按鈕上的藍色閃光)顯示按鈕響應,對觸摸作出響應的視圖仍是底層視圖。 – Kyle 2011-02-05 19:30:29
可以修改響應橙色視圖點擊手勢的方法:
-(void) handleTapFrom:(UITapGestureRecognizer*) recognizer {
CGPoint location = [recognizer locationInView:orangeView];
UIView *hitView = [orangeView hitTest:location withEvent:nil];
if ([hitView isKindOfClass:[UIButton class]]) {
return;
}
//code that handle orange view tap
...
}
如果觸摸一個UIButton這樣,水龍頭會由基礎視圖被忽略。
正確的答案(這可以防止劫持任何水龍頭tabrecognizer和不需要你實現一個委託等)是found here。我通過this post得到了這個答案。
總之使用:
tapRecognizer.cancelsTouchesInView = NO;
「防止水龍頭識別要抓住所有的 水龍頭只有一個」
- 1. CALayers是否阻止底層視圖中的觸摸事件?
- 2. UIButton觸摸事件重疊
- 3. UITapGestureRecognizer在子視圖中阻止UIButton的觸摸事件
- 4. 將UIView添加到UIButton子視圖可防止觸摸事件
- 5. iPad上的MPMediaPickerController - 底部視圖不接受觸摸事件
- 6. 地圖視圖觸摸事件處理
- 7. UIScrollView和UIButton觸摸側事件衝突
- 8. 事件觸摸結束了一個UIButton
- 9. 安卓:委託觸摸事件墊層視圖
- 10. 從觸摸事件中獲取視圖
- 11. Monodroid - 拖動視圖與觸摸事件?
- 12. 捕捉子視圖觸摸事件
- 13. 只將觸摸事件轉發給正在觸摸的視圖
- 14. 檢測底層元素的觸摸
- 15. 如何處理UIButton上的觸摸事件和手勢事件?
- 16. 子視圖中的UIButton不響應使用objective-c觸摸事件
- 17. 觸摸事件圖形
- 18. UIViewController圖像觸摸事件
- 19. 覆蓋視圖,但仍然讓底層視圖接收事件
- 20. 混合圖層圖像上的觸摸事件Android
- 21. 觸摸事件
- 22. 將觸摸事件從視圖切換到其子視圖
- 23. 檢測觸摸UIButton
- 24. 取消觸摸它時的UIButton觸摸
- 25. 觸摸內部視圖和外部按鈕時觸發事件
- 26. 如何接收視圖層次結構中發生的所有觸摸事件?
- 27. UWP web視圖與「玻璃」層不接收指針/觸摸事件
- 28. 忽略絕對定位視圖觸摸,允許在底層滾動型
- 29. 事件觸摸屏輕輕觸摸
- 30. Android測試,可視化觸摸事件
我已經結束了什麼做的是交易的UIButtons UIViews也有一個附加的輕拍手勢識別器。這似乎按照我期望按鈕的行爲方式工作。 – Kyle 2011-02-07 16:14:06