How can I detect a double tap on a certain cell in UITableView?

后端 未结 14 1024
悲哀的现实
悲哀的现实 2020-12-01 00:18

How can I detect a double tap on a certain cell in UITableView?

i.e. I want to perform one action if the user made a single touch and a

相关标签:
14条回答
  • 2020-12-01 00:58

    Override in your UITableView class this method

    - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
     {
    
         if(((UITouch *)[touches anyObject]).tapCount == 2)
        {
        NSLog(@"DOUBLE TOUCH");
        }
        [super touchesEnded:touches withEvent:event];
    }
    
    0 讨论(0)
  • 2020-12-01 01:01

    If you do not want to create a subclass of UITableView, use a timer with the table view's didSelectRowAtIndex:

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
        //checking for double taps here
        if(tapCount == 1 && tapTimer != nil && tappedRow == indexPath.row){
            //double tap - Put your double tap code here
            [tapTimer invalidate];
            [self setTapTimer:nil];
    
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Double Tap" message:@"You double-tapped the row" delegate:self cancelButtonTitle:nil otherButtonTitles:@"OK", nil];
            [alert show];
            [alert release];
        }
        else if(tapCount == 0){
            //This is the first tap. If there is no tap till tapTimer is fired, it is a single tap
            tapCount = tapCount + 1;
            tappedRow = indexPath.row;
            [self setTapTimer:[NSTimer scheduledTimerWithTimeInterval:0.2 target:self selector:@selector(tapTimerFired:) userInfo:nil repeats:NO]];
        }
        else if(tappedRow != indexPath.row){
            //tap on new row
            tapCount = 0;
            if(tapTimer != nil){
                [tapTimer invalidate];
                [self setTapTimer:nil];
            }
        }
    }
    
    - (void)tapTimerFired:(NSTimer *)aTimer{
        //timer fired, there was a single tap on indexPath.row = tappedRow
        if(tapTimer != nil){
            tapCount = 0;
            tappedRow = -1;
        }
    }
    

    HTH

    0 讨论(0)
提交回复
热议问题