2009-10-22 72 views
1

我有一個處理用戶手勢的自定義表視圖單元。但是,即使我將exclusiveTouch設置爲YES,即使y值發生任何變化,即使我正處於處理觸摸事件的過程中,也會開始滾動。當我處理單元格中的觸摸事件時,如何防止表格滾動?防止觸摸被父表視圖處理

回答

2

所以,正確的有條件地處理不幸的方式取決於superView。對於某些視圖和事件(如UITableView選擇),您需要將touchesBegan:事件轉發到nextResponder,跟蹤您的手勢,將touchesMoved:events移動到下一個響應者,直到您檢測到您的手勢,並在觸發時發送touchesCancelled:到下一個響應者,並隱藏下一個響應者的所有其他事件(touchesEnded:並touchesCancelled :),直到你收到touchesEnded:或touchesCancelled:自己。

但是,在UIScrollView中,有一個特殊情況,它不依賴於作爲nextResponder處理滾動事件(滾動最有可能在hitTest方法中檢測到:)。因此,無論您是否在轉發或事件方面做了什麼,滾動仍然會發生。防止滾動發生的唯一方法是在檢測到手勢後立即禁用父視圖上的滾動,然後在滾動結束或取消時重新啓用滾動。

1

我認爲你需要繼承的UITableView和實施則hitTest:withEvent:方法這是我做的一個自定義單元格我建做左,右細胞內滑動:

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event 
{ 
    NSIndexPath *indexPath = [self indexPathForRowAtPoint:point]; 
    UITableViewCell *cell = [self cellForRowAtIndexPath:indexPath]; 

    if ([cell isKindOfClass:[MyCustomCell class]]) 
    { 
     return cell; 
    } 

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

這不會阻止單元格中發生的所有事件冒泡嗎? – 2009-10-22 18:35:21

+0

是的,雖然你應該能夠分析事件的觸摸更高級的處理,在我的情況下,這不是一個問題。 – 2009-10-22 19:02:43