簡體   English   中英

UIView上的UITapGestureRecognizer及其子視圖在點擊子視圖時一起響應

[英]UITapGestureRecognizer on UIView and Its Subview Respond Together When Subview Is Tapped

UITapGestureRecognizer適用於UIImageView及其子視圖( UITextView )。 但是,當我點擊子視圖時,接收器變為子視圖及其父視圖(即UIImageView + UITextView )。 但它應該只是subview,因為那是我點擊的那個。 我假設嵌套手勢會先做出反應,但顯然父母會接到第一個敲擊然后它會轉到孩子身上。

因此,針對各種場景存在不同的解決方案(與我的不同,而是滾動視圖內的按鈕沖突)。 如何在沒有可能的子類化和iOS 6+支持的情況下輕松解決我的問題? 我嘗試在UIImageView上推遲UIGestureRecognizer啟動觸摸,我嘗試將cancelsTouchesInView設置為NO - 一切都沒有運氣。

請嘗試以下代碼:

使< UIGestureRecognizerDelegate >符合您的課程。

設置yourGesture.delegate = self ;

然后添加此委托方法:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
    // return YES (the default) to allow the gesture recognizer to examine the touch object, NO to prevent the gesture recognizer from seeing this touch object.
    if([touch.view isKindOfClass: [UITextView class]] == YES)] {
        return YES;
    }
    else {
        return NO;
    }
}

希望它能解決你的問題。 享受編碼.. !!!!

這正是它應該做的。 視圖層次結構類似於樹結構,並且在觸摸手勢期間從根節點開始遍歷。 您的父視圖很可能首先接收手勢然后接收其子視圖。 遍歷跳過了節點

userInteractionEnabled = NO。

因為,你沒有任何代碼我無法幫你玩這個標志。 更通用的解決方案是始終僅為您的parentView設置手勢,並且在手勢委托中檢查坐標是否屬於任何一個子視圖,如果是,則調用您的子視圖的手勢方法。 不是一個干凈的方法,但有效。

您應該實現UIGestureRecognizer委托方法,並在識別出多個手勢時將正確的策略應用於手勢

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM