2011-09-28 62 views
10

我希望有人能夠幫助我解決目前正在做我的頭的問題!在UIScrollView裏面檢測UITableViewCell上的滑動手勢

給出下面的視圖層次

enter image description here

我希望能夠檢測我的自定義的UITableViewCell滑動手勢。

我已經子類的的UIScrollView和有則hitTest:withEvent:方法方法來檢查我是否觸摸的tableview細胞(或其內容)或沒有,在這種情況下我設置以下滾動視圖屬性:

- (UIView*)hitTest:(CGPoint)point withEvent:(UIEvent *)event 
{ 
    UIView* result = [super hitTest:point withEvent:event]; 
    if ([result.superview isKindOfClass:[UITableViewCell class]] || [result.superview tag] == SUBVIEW_TAG) 
    { 
     self.canCancelContentTouches = NO; 
     self.delaysContentTouches = YES; 
    } else { 
     self.canCancelContentTouches = YES; 
     self.delaysContentTouches = NO; 
    } 
    return result; 
} 

我還實施:

- (BOOL)touchesShouldCancelInContentView:(UIView *)view 
{ 
    if (view.tag == SUBVIEW_TAG || [[view superview] isKindOfClass:[UITableViewCell class]]) 
     return NO; 
    return YES; 
} 

而且是回在NO的情況被觸摸的觀點是表視圖單元格。

這些方法都被調用,並按預期執行它們的操作,但我仍然無法阻止UIScrollView「揮霍」滑動手勢。

有趣的是,如果我在上面的兩個方法(包含SUBVIEW_TAG的那個)上包含了包含tableview和cell的UIView,它完美的工作,所以我猜測它必須與UITableView從UIScrollView繼承。

我的主要目標是能夠在單元上滑動以顯示更多細胞選項。在該視圖的任何其他位置的水平滑動將被滾動視圖捕獲,並按照其正常行爲水平移動內容。

任何想法將非常感激!

謝謝! 羅格

+0

是否不足以將手勢識別器添加到UITableViewCell? – teriiehina

+0

你有沒有解決這個問題? 如果是這樣,你介意分享你的解決方案嗎?你已經很好地詳細描述了問題 - 以類似的方式回答會非常棒! – iOSProgrammingIsFun

+0

是的,這是一個很棒的解決方案 – Pasta

回答

2

我有一個類似的問題與刷卡檢測爲滾動視圖中的組成部分,我能夠與

[scrollView.panGestureRecognizer requireGestureRecognizerToFail:swipeGesture] 

哪裏滾動視圖是一個行爲象容器和swipeGesture滾動視圖目的是解決這個問題滾動視圖中的組件輕掃手勢對象。

所以,你可以(在本例右輕掃,自定義它,只要你想)定義爲這樣的細胞對象輕掃

UISwipeGestureRecognizer* rightSwipeRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(yourMethod)]; 
     [rightSwipeRecognizer setDirection:UISwipeGestureRecognizerDirectionLeft]; 

[cell addGestureRecognizer:rightSwipeRecognizer]; 

,然後做

[scrollView.panGestureRecognizer requireGestureRecognizerToFail:rightSwipeRecognizer] 

文檔requireGestureRecognizerToFail說:

此方法創建與另一個手勢識別器的關係,它將接收器的轉換延遲到 UIGestureRecognizerStatePossible。接收機 過渡到依靠什麼與otherGestureRecognizer發生的狀態:

如果otherGestureRecognizer過渡到 UIGestureRecognizerStateFailed,接收器轉變到正常 下一個狀態。

如果otherGestureRecognizer轉變到 UIGestureRecognizerStateRecognized或UIGestureRecognizerStateBegan, 接收機轉換到UIGestureRecognizerStateFailed。

可能會調用此方法的示例是,當您想要單擊手勢時需要雙擊手勢失敗。

Availability在iOS 3.2及更高版本中提供。

希望有所幫助!

2

該解決方案非常簡單。您只需在UITableViewCell的內添加UIScrollView 即可。它將防止在滑動手勢中出現「h」「效果。

Embedded UIScrollView

相關問題