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
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權並注明出處。