在VC上加一個tableview,為什么touchesBegan方法沒有觸發


pointInside(),查找是從UIWindow開始,先判斷是否點擊點是否在自己的bounds內,如果是,往下遍歷;hitTest(),最終返回的view,是逆向的,如果能響應點擊,就把自己返回。

 

為什么沒有響應點擊
在VC上加一個tableview,為啥touchesBegan()沒有觸發?
tableview繼承scrollview,scrollview默認取消touch的傳遞,所以父視圖就不會響應touch了。

為什么VC的view上加了其他子視圖,當點擊子視圖時,VC中的touchesBegan()被調用了?
答:因為子視圖沒有重寫這個方法touchesBegan(),請參考下面的問題;

為什么uiview,重寫了touchesBegan(),VC的touchesBegan()就不響應了?
答:子視圖響應了touch,那么父視圖touch就不會響應了。

TableView為什么不響應touchBegan

回到剛開始的問題,當我們點擊TableView時,為什么touchBegan不響應呢?通過響應鏈我們不難想象到,當我們點擊屏幕時,第一響應者應該是UITableView,而我們調用的touchBegan其實是ViewController的View的方法,所以無法被調用。
解決方法也很簡單,我們可以給tableView寫一個基類,重寫tableview的touchBegan方法,通過block或者代理傳出,然后繼承基類,即可實現touchBegan的響應。


不過對於滾動視圖的鍵盤回收,感覺還是`tableView.keyboardDismissMode = UIScrollViewKeyboardDismissModeOnDrag`這樣比較優雅,畢竟是系統提供的。 

 


作者:WhisperKarl
鏈接:https://www.jianshu.com/p/d77164f8cac5
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權並注明出處。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM