2013-04-11 28 views
2

我在網上看到很多關於它的問題,特別是在StackOverflow上。 我測試了很多給出的答案,但在我的情況下,沒有任何工作。shouldReceiveTouch不叫

我的類實現了協議UIGestureRecognizerDelegate

@interface CDMapViewController : CDViewController <UIGestureRecognizerDelegate> 

下面的方法是從Xcode的自動完成在@implentation寫我的班級

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer 
shouldReceiveTouch:(UITouch *)touch { 
    NSLog(@"not called"); 
    return NO; 
} 

我有正確初始化的UIGestureRecognizer在第一方法,正確請撥打第二,第三和第四種方法:

- (void)initGestureOnMap { 
    UIGestureRecognizer *gestureRecognizer = [[UIGestureRecognizer alloc] init]; 
    gestureRecognizer.delegate = self; 
    [self.view addGestureRecognizer:gestureRecognizer]; 
} 

- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    [super touchesBegan:touches withEvent:event]; 
    gesture_dragging = NO; 
} 

- (void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { 
    [super touchesMoved:touches withEvent:event]; 
    gesture_dragging = YES; 
} 

- (void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { 
    [super touchesEnded:touches withEvent:event]; 
    if (gesture_dragging || [touches count] != 1) return; 
     /* bla bla bla */ 
} 

...它不記錄 - 不叫...爲什麼?

+1

手勢識別器旨在代替'touchesBegan:'和所有這些方法。你通常只需要實現一個或另一個。 – 2013-04-11 11:45:32

回答

2

您需要撥打super實現touches方法。

- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    [super touchesBegan:touches withEvent:event]; 
    gesture_dragging = NO; 
} 

... and so on. 

這些方法需要對你的看法實施,而不是你的視圖控制器。

選擇你想要的手勢。本身,UIGestureRecognizer並沒有太多,所以選擇一個像UITapGestureRecognizer。接下來,使用指定的初始化器實現您的手勢識別器。

UITapGestureRecognizer *gestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(myMethod:)]; 

最後,執行myMethod:

-(void)myMethod:(UITapGestureRecognizer *)recognizer 
{ 
    // Whatever this does. 
} 
+0

感謝您的快速回答,我現在就這樣做......但它不能解決問題。它不會調用應急接觸功能 – 2013-04-11 11:38:20

+0

你在尋找什麼樣的手勢?水龍頭?你需要使用'UIGestureRecognizer'的子類。 – 2013-04-11 11:40:16

+0

是的,我想抓一個水龍頭,但它是在MKMapView選擇覆蓋。 我想調用shouldReceiveTouch來禁用mapView頂部信息欄上的觸摸。 – 2013-04-11 11:42:26