2013-10-25 27 views
4

UITapGestureRecognizer適用於UIImageView及其子視圖(UITextView)。但是,當我點擊子視圖時,接收者變成子視圖及其父視圖(即UIImageView + UITextView)。但它應該只有子視圖,因爲那是我點擊的那個。我假設嵌套手勢會首先作出反應,但顯然父母接受了拳頭敲擊,然後它會轉到孩子身上。UIView上的UITapGestureRecognizer及其子視圖在子視圖被抽頭時一起響應

因此,有不同的解決方案在那裏爲各種情況(不類似於我的,而是滾動視圖衝突內的按鈕)。如何輕鬆解決我的問題,而無需子類化和iOS 6+支持?我試着在的UIImageView開始延遲觸摸,我試着設置cancelsTouchesInViewNO - 所有都沒有運氣。

+0

請介意分享一些代碼。你如何添加手勢? –

回答

9

試試下面的代碼:

符合的< UIGestureRecognizerDelegate>上您的課。

set 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; 
    } 
} 

希望這將解決您的問題。享受編碼.. !!!!

0

應實現UIGestureRecognizer委託方法和應用正確的政策姿態,當多個手勢識別

3

這恰恰又是什麼應該做的。 視圖層次結構就像一個樹結構,它在觸摸手勢過程中的遍歷從根節點開始。您的父視圖很可能先接收手勢,然後再接收其子視圖。遍歷跳過節點

userInteractionEnabled = NO。

因爲你沒有任何代碼我不能幫你玩這個標誌。更通用的解決方案是始終只爲您的父視圖設置手勢,並在手勢代表檢查座標是否屬於子視圖中的任何一個,如果是,則調用您的子視圖的手勢方法。 不是一個乾淨的方法,但工程。 !

+0

我的問題是觸摸手勢總是去超視圖,並跳過子視圖。把旗子轉到YES(或者迅速是真的)救了我的命 – aquajach