pointInside(),查找是從UIWindow開始,先判斷是否點擊點是否在本身的bounds內,若是是,往下遍歷;hitTest(),最終返回的view,是逆向的,若是能響應點擊,就把本身返回。iview
爲何沒有響應點擊
在VC上加一個tableview,爲啥touchesBegan()沒有觸發?
tableview繼承scrollview,scrollview默認取消touch的傳遞,因此父視圖就不會響應touch了。ide
爲何VC的view上加了其餘子視圖,當點擊子視圖時,VC中的touchesBegan()被調用了?
答:由於子視圖沒有重寫這個方法touchesBegan(),請參考下面的問題;ui
爲何uiview,重寫了touchesBegan(),VC的touchesBegan()就不響應了?
答:子視圖響應了touch,那麼父視圖touch就不會響應了。代理
回到剛開始的問題,當咱們點擊TableView時,爲何touchBegan不響應呢?經過響應鏈咱們不難想象到,當咱們點擊屏幕時,第一響應者應該是UITableView,而咱們調用的touchBegan實際上是ViewController的View的方法,因此沒法被調用。
解決方法也很簡單,咱們能夠給tableView寫一個基類,重寫tableview的touchBegan方法,經過block或者代理傳出,而後繼承基類,便可實現touchBegan的響應。blog
不過對於滾動視圖的鍵盤迴收,感受仍是`tableView.keyboardDismissMode = UIScrollViewKeyboardDismissModeOnDrag`這樣比較優雅,畢竟是系統提供的。 繼承
做者:WhisperKarl 連接:https://www.jianshu.com/p/d77164f8cac5 來源:簡書 簡書著做權歸做者全部,任何形式的轉載都請聯繫做者得到受權並註明出處。