2011-09-28 5 views
10

誰かが私の頭の中で悩んでいる問題を手伝ってくれることを願っています!UIScrollView内のUITableViewCellでスワイプジェスチャーを検出する

は、私は私のカスタムUITableViewCellの上でスワイプジェスチャーを検出できるようにしたい、次のビュー階層

enter image description here

を考えます。

IはUIScrollViewのをサブクラス化し、hitTest有した:withEvent:方法私は、次のスクロールビューのプロパティを設定した場合、テーブルビューのセル(またはその内容)か、タッチしていますかどうかを確認:

- (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から継承します。

私の主な目標は、セルをスワイプしてセルのオプションを増やすことです。そのビュー上の他の場所にある水平スワイプは、スクロールビューでキャプチャされ、通常の動作に従ってコンテンツを水平方向にシフトします。

アイデアは非常に高く評価されます。

ありがとうございます! Rogメール

+0

のUITableViewCellにジェスチャー認識を追加するには十分ではないでしょうか? – teriiehina

+0

これを解決しましたか? もしそうなら、ソリューションを共有してもよろしいですか?あなたは問題を非常にうまく詳細に説明しました。同様の方法で答えは素晴らしいでしょう! – iOSProgrammingIsFun

+0

うん、その解決策は素晴らしいだろう – Pasta

答えて

2

私はスワイプで同様の問題がscrollview内部コンポーネントを検出持っていたと私は

scrollViewがコンテナのように機能し、swipeGestureは、スクロールビューオブジェクトである
[scrollView.panGestureRecognizer requireGestureRecognizerToFail:swipeGesture] 

でそれを解決することができましたスクロールビュー内のコンポーネントスワイプジェスチャーオブジェクトその後、

(あなたが望むようには、一例では右スワイプするためのカスタムを)だから、あなたはこのようなセルオブジェクトのスワイプを定義することができます

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

[cell addGestureRecognizer:rightSwipeRecognizer]; 

とは

[scrollView.panGestureRecognizer requireGestureRecognizerToFail:rightSwipeRecognizer] 

マニュアルを参照してくださいrequireGestureRecognizerToFailのコメント:

このメソッドは、別のジェスチャ認識器との関係を作成します。受信者のトランジションを から遅延させるUIGestureRecognizerStatePossible。

otherGestureRecognizerが通常の 次の状態へ UIGestureRecognizerStateFailed、受信機の遷移に遷移した場合:受信機 遷移にはotherGestureRecognizerで何が起こるかに依存状態という。

otherGestureRecognizerが UIGestureRecognizerStateRecognized又はUIGestureRecognizerStateBegan、 UIGestureRecognizerStateFailedに受信遷移に遷移する場合。

シングルタップジェスチャーでダブルタップジェスチャーが失敗することが必要な場合は、このメソッドが呼び出される場合があります。

利用状況iOS 3.2以降で利用できます。

希望に役立ちます!

2

解決策はかなりシンプルです。あなたがする必要があるのは、UITcrollView の中に追加するだけです。あなたはUITableViewCellです。それはスワイプジェスチャー中の "ホギング"効果を防ぎます。

Embedded UIScrollView