需求是首頁TableView中嵌套顯示一個H5扮休,我想到的是把WkWebView放到一個cell中顯示,并且以H5的內(nèi)容高度為改Cell的高度贱案,也就是完全顯示H5的內(nèi)容肛炮,webView和webView.scrollView的屬性都設(shè)置妥當(dāng),但是在上滑時沒有問題宝踪,在下滑時卻出現(xiàn)了滑動沖突侨糟,webView攔截了滑動手勢,致使tableView無法正炒裨铮滑動秕重。
1、剛想出的方案是:webView.userInteractionEnabled = NO厉膀,讓webView無法和用戶交互溶耘,這樣確實(shí)解決了問題。但是忘深了一想服鹅,萬一以后產(chǎn)品想讓html的內(nèi)容能點(diǎn)擊了怎么辦凳兵,這種方法無疑堵死了以后的路
2、然后就是常用方法企软,繼承UIScrollView重寫
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
使兩個手勢等同時響應(yīng)庐扫,但是本文中的scollview屬于webView,已無法通過常規(guī)手段更改仗哨,無計可施了
3形庭、無意間看到UIView有一個
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
看函數(shù)名和參數(shù)就覺得肯定和觸摸事件有關(guān),于是就通過swizzed這個方法厌漂,在方法中一旦發(fā)現(xiàn)webView傳過來的gestureRecognizer(經(jīng)測試沖突時webView傳過來的是UIWebTouchEventsGestureRecognizer類)是想要攔截的就return NO萨醒,其他的gestureRecognizer就正常return就好了(也就是方法變化的常用寫法,千萬別忘了寫)
注意:這種全局變換系統(tǒng)方法是很危險的苇倡,會出現(xiàn)意想不到的問題富纸,慎用
關(guān)鍵代碼:
- (BOOL)extention_gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {
??? if([gestureRecognizer isKindOfClass:NSClassFromString(@"UIWebTouchEventsGestureRecognizer")]){
??????? return NO;
??? }
??? return [self extention_gestureRecognizerShouldBegin:gestureRecognizer];
}