2012-07-19 82 views
1

GIKAnimatedCallout示例代碼中,雙擊手勢,雙指輕敲手勢,縮放手勢和捏手勢都從UITableView傳遞到它下面的MKMapView 。我想阻止這種事情發生。 UITableView內的觸摸事件不應該傳遞給MKMapView。UITableView將觸摸事件傳遞到超級視圖時不應該

我已經嘗試添加一個UITestureRecognizer的水龍頭,並使其成爲一個空方法,但這些觸摸事件仍然發送到MKMapView以及UITableView。

通過調試器查看UITableView的superview層次結構,我發現UITableView是MKMapView的後代。

我真的不知道如何解決這個問題。任何指針讚賞。

+0

當您顯示彈出窗口時,請在地圖視圖中設置userInteractionEnabled:NO。 – isaac 2012-07-19 22:45:02

+1

在MKMapView視圖中設置'userInteractionEnabled:'將不允許與地圖視圖或其任何子視圖交互。如果UITableView是MKMapView的子視圖,或者我們想與MKMapview的子視圖中的一個進行交互,這種方法將無法工作。 – 2012-07-24 17:39:31

回答

3

如果我理解正確,如果在UITableView上創建手勢(例如,myMKMapView的myTableView屬性爲UITableView),您希望MKMapView不會有任何反應。如果是的話,你應該在你的MKMapView的子類中實現

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch;

(讓子類,如果你沒有一個。我已經叫在這個例子中的子類myMKMapView)。首先讓您的MKMapView的子類myMKMapView符合UIGestureRecognizerDelegate協議。在的MKMapView的.h文件中 :

@interface myMKMapView : MKMapView <UIGestureRecognizerDelegate> 

此步驟完成後,進入myMKMapView的.m文件,並實現以下這樣:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { 
    UIView *view = [self.view hitTest:[touch locationInView:self.view] withEvent:nil]; 

    if ([view isDescendantOfView:(self.myTableView)]) { 
     return NO; 
    } 
    return YES; 
} 

這就告訴myMKMapView,如果執行上的手勢它的myTableView屬性,myMKMapView應該忽略它。

+0

有沒有一種方法可以在沒有MKMapView子類的情況下實現我的目標? – ryanrhee 2012-07-24 20:05:33

+0

你可以嘗試使用'UIView'的'exclusivetouch'屬性,但我不太熟悉,不知道它是否適用於這種情況。 – 2012-07-24 20:15:31

相關問題