因爲項目需求,在一個UIView
中使用了富文本M80AttributedLabel
控件,底層UIView
上添加一個UITapGestureRecognizer
單擊事件,用於點擊空白處收起鍵盤。M80AttributedLabel
中使用了一個Link
跳轉,控件內部使用的是UITouch
來作處理的,剛開始調試發現怎麼點都沒法觸發M80AttributedLabel
的Link
跳轉,後來對UITouch
事件進行斷點跟蹤,發現ide
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
事件沒法正確執行,而是在調試
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
事件中就中斷了。
通過資料查詢,最後發現是由於底層UIView
加了UITapGestureRecognizer
而這個手勢致使了touchesCancelled
被觸發從而使觸摸失效。code
解決辦法:
1.經過設置UITapGestureRecognizer
的cancelsTouchesInView
屬性。cancelsTouchesInView
的官方描述是「A Boolean value affecting whether touches are delivered to a view when a gesture is recognized.
」也就是說,能夠經過設置這個布爾值,來設置手勢被識別時觸摸事件是否被傳送到視圖。
當值爲YES的時候,系統會識別手勢,並取消觸摸事件;爲NO的時候,手勢識別以後,系統將觸發觸摸事件。事件
gestureRecognizer.cancelsTouchesInView = NO;
2.移除底層UIView
的UITapGestureRecognizer
事件,添加一個UIButton
,經過UIButton
的UIControlEventTouchUpInside
來實現一樣的點擊空白處收起鍵盤。it