1

私は iOS 5 アプリを開発しています。私の場合、ユーザーが最初に UITableView の行をタップすると何らかのアクションが実行され、2 回目にタップすると別のアクションが実行されます。

さて、問題は、特定の行が 2 回タップされたかどうかを知る方法です。

前もって感謝します!!

4

2 に答える 2

5

それなら、TableViewでUIGesturesを使用してみませんか。これは、チャームのように私にとって最も簡単なソリューションになります。

これがあなたのコードにそれを実装するのを助けるコードです:

    // Put this code in your ViewDidLoad:
    UITapGestureRecognizer *doublegesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(didTableViewCellDoubleTapping:)];
    doublegesture.numberOfTapsRequired = 2;
    [roomTableView addGestureRecognizer:doublegesture];
    [doublegesture release];

//ダブルタップでイベントを処理するメソッド

-(void)didTableViewCellDoubleTapping:(UITapGestureRecognizer *)gestureRecognizer 
{
    if (gestureRecognizer.state == UIGestureRecognizerStateEnded) {
        CGPoint swipeLocation = [gestureRecognizer locationInView:roomTableView];
        NSIndexPath *swipedIndexPath = [roomTableView indexPathForRowAtPoint:swipeLocation];
        NSLog(@"%d",swipedIndexPath.row);
                
        // ... Here you can add your logic
    }
}

同様に、シングルタッピング用に別のUIGestureを追加した場合

 UITapGestureRecognizer *gesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(didTableViewSingleCellTapping:)];
    gesture.numberOfTapsRequired = 1;
    [roomTableView addGestureRecognizer:gesture];
    [gesture release];
    
    [gesture requireGestureRecognizerToFail:doublegesture];

-(void)didTableViewSingleCellTapping:(UITapGestureRecognizer *)gestureRecognizer 
{
    if (gestureRecognizer.state == UIGestureRecognizerStateEnded) {
        CGPoint swipeLocation = [gestureRecognizer locationInView:roomTableView];
        NSIndexPath *swipedIndexPath = [roomTableView indexPathForRowAtPoint:swipeLocation];
        
        NSLog(@"%d",swipedIndexPath.row);
    }
}
于 2012-10-18T11:12:59.923 に答える
1

これが私の解決策です(エイコが提案するように):

変更可能な配列を維持し、行が配列で初めて選択されたときに行インデックスを保存し、最初のアクションを呼び出します。行が 2 回目に選択されたとき、または別の行が選択されたときに、その行のインデックスが配列に存在するかどうかを確認し、存在する場合は 2 番目のアクションを呼び出し、そうでない場合は行のインデックスを配列に追加して最初のアクションを呼び出します。

于 2012-10-19T06:15:14.953 に答える