2011-06-22 28 views
1

我有一個滾動視圖,並放置在一個按鈕,當我加點觸手勢識別器的按鈕不起作用。是否有任何限制點擊的方法只能滾動視圖而不是按鈕,以便按鈕正常工作。限制輕敲手勢來滾動型,而不是按鈕放置在其

這裏是我的代碼

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


- (void)tapGesture:(UIGestureRecognizer*)gesture{ 


NSLog(@"scroll tapped"); 

} 

回答

2

如果你

tap.cancelsTouchesInView = NO; 

它將使按鈕被按下。但是,當您按下按鈕時,輕觸按鈕將隨着按鈕按下而被檢測到。請避免這種情況,你將不得不繼承UIScrollView和實施以下方法 -

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event { 
    for (UIView * subview in self.subviews) { 
     UIView * hitView = [subview hitTest:point withEvent:event]; 
     if (hitView) 
      return hitView; 
    } 

    return [super hitTest:point withEvent:event]; 
} 

實現上述方法通過觸摸滾動視圖的子視圖。

+0

感謝很多人!!!!我一直被困在這個問題上很長時間... – Ankit

+1

如何使用這種方法? –

0

有沒有需要繼承滾動視圖。以下代碼輕鬆解決了問題。該方法gestureRecognizer:shouldReceiveTouch:的伎倆。

UITapGestureRecognizer* tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapGesture:)]; 
tap.numberOfTapsRequired = 1; 
tap.numberOfTouchesRequired = 1; 
tap.delegate = self; 
tap.cancelsTouchesInView = NO; 
[scroll addGestureRecognizer:tap]; 
[tap release]; 

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { 
    if (scroll.superview != nil) { 
     if ([touch.view isKindOfClass:[UIButton class]]) 
     { 
      return NO; // ignore the touch 
     } 
    } 
    return YES; // handle the touch 
} 

- (void)tapGesture:(UIGestureRecognizer*)gesture { 
    NSLog(@"scroll tapped"); 
} 
相關問題