我創建了一個包含兩個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. 使用nextResponder觸摸底層視圖
- 4. UIButton觸摸事件重疊
- 5. 觸摸事件視圖和子視圖
- 6. UITapGestureRecognizer在子視圖中阻止UIButton的觸摸事件
- 7. 將UIView添加到UIButton子視圖可防止觸摸事件
- 8. 觸摸UIButton觸摸
- 9. iPad上的MPMediaPickerController - 底部視圖不接受觸摸事件
- 10. 地圖視圖觸摸事件處理
- 11. 安卓:委託觸摸事件墊層視圖
- 12. UIButton沒有收到觸摸事件
- 13. 事件觸摸結束了一個UIButton
- 14. UIButton觸摸事件 - 斯威夫特
- 15. UIScrollView和UIButton觸摸側事件衝突
- 16. Android的視圖觸摸事件
- 17. Monodroid - 拖動視圖與觸摸事件?
- 18. 從觸摸事件中獲取視圖
- 19. 捕捉子視圖觸摸事件
- 20. 只將觸摸事件轉發給正在觸摸的視圖
- 21. 檢測底層元素的觸摸
- 22. 在不使用UIButton的情況下觸摸圖片的事件
- 23. 如何處理UIButton上的觸摸事件和手勢事件?
- 24. 如何檢測子視圖中的事件觸摸或如何在觸摸子視圖時觸及父視圖?
- 25. 子視圖中的UIButton不響應使用objective-c觸摸事件
- 26. UIViewController圖像觸摸事件
- 27. 觸摸事件圖形
- 28. 覆蓋視圖,但仍然讓底層視圖接收事件
- 29. 混合圖層圖像上的觸摸事件Android
- 30. 觸摸事件
我已經結束了什麼做的是交易的UIButtons UIViews也有一個附加的輕拍手勢識別器。這似乎按照我期望按鈕的行爲方式工作。 – Kyle 2011-02-07 16:14:06