2012-02-20 11 views
7

テーブルビューセルで2つのインタラクションが必要です:通常のタップと長押し。私は私が始めるのに役立つ、次への答えを使用:テーブルビューセルで長押しのジェスチャー

Long press on UITableView

それに伴う問題は、私は有効なセル上で長押しをすれば、セルは青色の強調表示されます、そして長押しジェスチャがないです火ではない(それは単なるタップだと思う)。しかし、有効でないセルで長押しのジェスチャーを開始し、有効なセルに指をスライドさせてから離した場合、正常に動作します。たぶんそこより良いそこに答えはおそらくですが、ここでそれを行うための一つの方法であるIBまたはプログラム的

[cell setSelectionStyle:UITableViewCellSelectionStyleNone]; 
+1

あなたの定義で「無効なセル」とは何ですか? – omz

+0

私はその "必要がないセル"と思う –

答えて

-2

まず、テーブルの上に長押しジェスチャー認識を作成しますそれ自体を見る。

UILongPressGestureRecognizer* longPressRecognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(onLongPress:)]; 
[self.tableView addGestureRecognizer:longPressRecognizer]; 

次に、選択された行を見つけることができ、そのルーチンとそれを扱う:

-(void)onLongPress:(UILongPressGestureRecognizer*)pGesture 
{ 
if (pGesture.state == UIGestureRecognizerStateRecognized) 
{ 
    //Do something to tell the user! 
} 
if (pGesture.state == UIGestureRecognizerStateEnded) 
{ 
    UITableView* tableView = (UITableView*)self.view; 
    CGPoint touchPoint = [pGesture locationInView:self.view]; 
    NSIndexPath* row = [tableView indexPathForRowAtPoint:touchPoint]; 
    if (row != nil) { 
     //Handle the long press on row 
    } 
} 
} 

私はそれを試していないが、私はジェスチャーを作ることによって、あなたが選択されていることを示すから行を保つことができると思いますテーブルビュー上の認識装置は、長押しが失敗するのを待つ。

+0

これは単に青の強調表示を無効にするだけですか? – user1120008

+0

私の理論は、セルがすでに強調表示されているため、あなたの長いプレスジェスチャーは起動しないということです。私の提案をテストしてください、あなたは何も失うことはありません。 –

+0

その方法では不運です。 – user1120008

23

選択を無効に

2

私は同じ問題を抱え、良い解決策を見つけました。 (少なくともiOS 7の場合)

これをセルに追加します。UILongPressGestureRecognizer

self.longPressGesture = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(onSelfLongpressDetected:)]; 
[self addGestureRecognizer:self.longPressGesture]; 

自己の目標をinitに、また、自己と呼び出されるonSelfLongpressDetected方法に再びgestureRecognizerを追加することが奇妙だが重要な。

0

私はこれに近い問題がありました。最初に、選択可能なセル内のUIViewに長い押しジェスチャを追加しようとしましたが、動作しませんでした。その解決策は、以前にFabioの答えで言われたように、セル自体にジェスチャーを追加することでした。

迅速ベローズ溶液の追加:

let longPress = UILongPressGestureRecognizer.init(target: self, action: #selector(longPress(_:))) 
longPress.minimumPressDuration = 1.0 
cell.addGestureRecognizer(longPress) 

IはUITableViewDataSource方法cellForRowAtIndexPath内部上記のコードを使用します。

関連する問題