2012-10-10 103 views
3

我有一個靜態單元格的表。其中一個單元有一個視圖,上面有一個平移手勢識別器。UIGestureRecognizer阻止tableview滾動

當我向下滾動我的tableview,當我到達與移動手勢識別器視圖中的單元格,滾動似乎並沒有工作。如果我觸摸視圖外側(側面或頂部或底部),它可以工作,我可以滾動。我在我的gesturerecognizer中有一個if語句,用於測試是否觸摸了某個區域,如果是,則執行一個動作。

我已經看過這個問題(http://stackoverflow.com/questions/3295239/uigesturerecognizer-blocking-table-view-滾動),但設置cancelsTouchesInView到NO沒有工作,我沒有任何設置狀態屬性和使用方法- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer 我不知道從哪裏獲取'otherGestureRecognizer'或者調用該方法的對象。

我假設我wan't把我的手勢識別器作爲第一個參數,以及tableview中的滾動手勢識別器作爲otherGestureRecogniser,是正確的?如果是這樣,我該如何得到它?

UIPanGestureRecognizer *windPanGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(moveWindHandle:)]; 

[self.windRangeView addGestureRecognizer:windPanGesture]; 

然後在我的moveWindHandle:

-(void)moveWindHandle:(UIPanGestureRecognizer *)gesture 
{ 
    gesture.cancelsTouchesInView = NO; 
    isMovingHandle = [self isPoint:startedTouchAt insideHandle:_toHandleWindImageView]; 
    if(isMovingHandle) { 

     if(gesture.state == UIGestureRecognizerStateBegan) { 
      //do stuff 
     } 
    } 
    else 
    { 
     //i want it to ignore this gesture and just scroll like normal if that is what hte user did 
    } 
} 

我已經設置了tableviewcontroller爲UIGestureRecognizerDelegate,但我不知道如何處理這一點。

回答

7

你不會是一個叫-gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:。該方法由系統調用。您需要將您的表格視圖控制器設置爲窗口平移手勢的代表。

windPanGesture.delegate = self; 

在這一點上,當你做的鍋,系統會調用委託方法-gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:與手勢識別爲一個參數,滾動視圖的手勢識別爲其他。


更新

您可能還需要實現-gestureRecognizerShouldBegin:方法並返回NO,如果你是不是在某些領域之一。

+0

我已經設置了'windPanGesture.delegate = self'但是這並沒有完全解決這個問題。如果我從windRangeView外部啓動滾動,然後從windRangeView內部繼續它,它的工作原理。但是,如果tableview是靜止的,並且我嘗試從windRangeView中啓動一個滾動,它不會執行滾動。 – Brentoe

+0

完美,謝謝! -gestureRecognizerShouldBegin:在修復它後添加。 – Brentoe