我有一個視圖UITableView
作爲subview
,它完全覆蓋父視圖。當我嘗試爲父視圖實現touchesBegan
時,我注意到該方法根本沒有被調用。有沒有辦法覆蓋這種行爲?子視圖阻止父視圖TouchesBegan?
3
A
回答
3
touchesBegan
方法必須處理父視圖的框架。如果該框架對於父視圖不可見並且完全被subviews
包圍,則父視圖將不會接收到觸摸。
0
這樣做:Why isn't my UIViewController in the responder chain for its view?
簡而言之:
- 將您的意見,您的控制器。
- 這個屬性添加名爲屬性
nextResponderPlusSomething
(已經有一個nextResponder
)視圖中這是越來越觸及 - 在
viewdidload
集控制器(個體經營) - 的
touchesBegan
內部的調用添加到nextResponderPlusSomething:touchesBegan
- 在控制器上實現此事件,將事件發送到您想要調用的視圖。
1
您還可以設置:
[theViewThatIsCoveringParent setUserInteractionEnabled:NO];
這樣,所有觸摸將被父被抓。
11
其實有一種方法可以覆蓋此行爲。您需要延長卡住父視圖中的每個子對象和覆蓋touchesBegan
方法是這樣的:
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[super touchesBegan:touches withEvent:event];
[self.nextResponder touchesBegan:touches withEvent:event];
}
舉例來說,如果你有一個UIButton一個UIScrollView這是一個UIView內內,那麼你需要創建兩個自定義類。一個擴展UIButton和其他擴展的UIScrollView。在每個這些自定義類中,您都需要添加上面的方法定義。在這些更改之後,您將能夠在父UIView中收到touchesBegan
事件。
相關問題
- 1. 在子視圖作用於子視圖後,阻止接收觸摸事件的父視圖
- 2. touchesBegan關閉視圖
- 3. touchesBegan停止工作,當視圖移到超級視圖之外
- 4. asp.net mvc父視圖父視圖更新子視圖
- 5. 如何爲子視圖阻止didSelectRowAtIndexPath?
- 6. touchesBegan()沒有在子視圖上調用
- 7. UIView clipToBounds不停止接收父視圖外的子視圖
- 8. 在子視圖上禁止從父視圖接收觸摸
- 9. 父視圖 - >子視圖 - >按鈕 - >子視圖方法
- 10. 從子視圖呈現父視圖backbone.js
- 11. ClistView - 父視圖和子視圖
- 12. 做的父視圖子視圖modalviewcontroller resignFirstResponder?
- 13. 父視圖繪製子視圖有效
- 14. 阻止從視圖模型
- 15. UIViewController阻止卸載視圖
- 16. 阻止MVC視圖提交
- 17. 防止視圖佈局子視圖
- 18. 將視圖的子視圖拖到其父視圖
- 19. 添加視圖從子視圖的父視圖
- 20. 基於視圖的NSOutlineView在父視圖上繪製子視圖
- 21. 如何防止子視圖從繪圖直到選擇父視圖?
- 22. 子視圖打破父
- 23. 更新父從子視圖
- 24. 電子網絡視圖阻止http圖像
- 25. 在渲染局部視圖後阻止主視圖渲染
- 26. 從視圖中移除父視圖的視圖從視圖中移除的視圖中的父視圖
- 27. 在Backbone.js中,如何阻止事件傳遞給父視圖?
- 28. touchesbegan不能在第二個視圖控制器的子視圖上工作
- 29. 如何防止在子視圖上觸擊父視圖上的UITapGestureRecognizer?
- 30. 阻止IE9進入兼容性視圖
這對我沒有幫助。 – Siamaster