2011-08-30 79 views
4

的檢測子視圖我已經添加了TapGestureRecognizer到我self.view:的UIScrollView和敲擊手勢

tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(singleTap:)]; 
    tap.numberOfTapsRequired = 1; 
    tap.numberOfTouchesRequired = 1; 
    [self.view addGestureRecognizer:tap]; 
    [tap release]; 

該視圖包含與圖像和標籤單一的UIScrollView。我想檢測用戶是否點擊標籤。

- (void)singleTap:(UIGestureRecognizer*)gestureRecognizer { 

    CGPoint pt = [gestureRecognizer locationInView:self.view]; 

    UIView *v = [self.view hitTest:pt withEvent:nil]; 
    if ([v isKindOfClass:[UILabel class]]) { 
     NSLog(@"label!"); 
     return; 
    } 
    // else do other stuff if its not a label 

但是我沒看到標籤!在我的日誌中。

回答

5

我認爲這是因爲userInteractionEnabled默認NOUILabel s。試着打開它。

編輯:這是一個真正的猜測,但只是爲了確認,在[UIView hitTest:withEvent:]狀態蘋果文檔:

這種方法忽略了隱藏視圖對象,有殘疾的用戶交互,或者有一個alpha水平低於0.01。

+0

謝謝!我還修改了上面的代碼,使用UIScrollView作爲hitTest和locationInView – Mark

0

您的子視圖(如標籤本身)實際上隱藏了用戶與底層視圖的交互。

爲什麼不將手勢識別器添加到您的標籤。 或者,您可能想要爲標籤使用UIButton。

或者 -

,如果你不想來確定哪些標籤已被感動了,你可能要在頂部添加一個不可見的視圖(空視圖,既不是隱藏的一個也沒有一個與Alpha = 0)所有標籤並將手勢識別器添加到這些標籤。